1

行ごとにカスタム編集ボタンがある剣道グリッドがあります。ユーザーが編集ボタンをクリックすると、ユーザーが情報を編集して変更を保存できるモーダル ウィンドウが開きます。

州の略語のドロップダウン リストを表示するエディター テンプレートを追加しました。

StatesEditor.cshtml

@(Html.Kendo().DropDownList()
.Name("State") 
.DataValueField("StateID") 
.DataTextField("ShortName") 
.BindTo((System.Collections.IEnumerable)ViewData["states"]))

これは、モーダル ウィンドウを開く前にコントローラーに入力されます。

public ActionResult OpenEditor([DataSourceRequest] DataSourceRequest request, int? addressId)
    {
        var address = db.Address.Where(x => x.AddressId == addressId).FirstOrDefault();
        // code where I convert the address to an AddressMetadata
        // ...
        // ...

        ViewData["states"] = ACore.Methods.ViewDataPopulation.PopuldateStates();


        return PartialView("~/Views/System/Addresses/AddressEditorPopup.cshtml", addr);
    }

私の見解では、

@Html.EditorFor(model => model.State)

これは私のモデルです:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace ACore.Models
{
    [MetadataType(typeof(AddressMetadata))]
    public partial class Address
    {
    }

    public class AddressMetadata
    {   
        public int AddressID { get; set; }

        public string Street1 { get; set; }
        public string Street2 { get; set; }
        public string City { get; set; }

        [UIHint("StatesEditor")]
        public State State { get; set; }

        public string ZipCode { get; set; }
    }
}

そして、これは私の状態モデルです:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ACore.Models
{
    public class State
    {
        public int Id { get; set; }
        public string ShortName { get; set; }
    }
}

ドロップダウンリストには州のリストが入力されていますが、リストの最初の州である「AK」に設定されています。状態が ID 41 で ShortName が "SC" の State Model にあるモデルをビューに渡しています。

ドロップダウンリストを渡された状態に設定するにはどうすればよいですか?

更新しました:

これが正しい方法かどうかはわかりませんが、これが私が修正した方法です。SelectedIndex を追加するだけで問題は解決しましたが、DropDownList の上にコードを追加して、ID を渡していない他の場所でこのエディターを使用できるようにしました。

@model ACore.Models.State
@{
    var modelId = 0;
}
@if (Model != null)
{
    modelId = Model.Id - 1;
}


@(Html.Kendo().DropDownList()
    .Name("State")
    .DataValueField("StateID")
    .DataTextField("ShortName")
    .SelectedIndex(modelId)
    .BindTo((System.Collections.IEnumerable)ViewData["states"])
)
4

1 に答える 1

0

上記の更新されたコメントで質問に答えました。これがこれを行うための推奨される方法であるかどうかを知りたいです。

@model ACore.Models.State
@{
    var modelId = 0;
}
@if (Model != null)
{
    modelId = Model.Id - 1;
}


@(Html.Kendo().DropDownList()
    .Name("State")
    .DataValueField("StateID")
    .DataTextField("ShortName")
    .SelectedIndex(modelId)
    .BindTo((System.Collections.IEnumerable)ViewData["states"])
)
于 2013-04-02T17:51:26.407 に答える