Шаблон редактора не выбирает правильное значение

У меня есть сетка Кендо с пользовательской кнопкой редактирования для каждой строки. Когда пользователь нажимает кнопку редактирования, открывается модальное окно, в котором пользователь может редактировать информацию и сохранять изменения.

Я добавил шаблон редактора для отображения раскрывающегося списка сокращений штатов.

Редактор штатов.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», первое состояние в списке. Я передаю свое представление о модели, в которой состояние соответствует модели состояния с идентификатором 41 и ShortName «SC».

Как я могу настроить свой раскрывающийся список в состояние, в котором я прохожу?

ОБНОВЛЕНО:

Я не знаю, правильный ли это способ сделать это, но вот как я это исправил. Просто добавление SelectedIndex решило проблему, но я добавил код над DropDownList, чтобы я мог использовать этот редактор в других местах, где я не передавал идентификатор.

@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"])
)

person Mithrilhall    schedule 02.04.2013    source источник


Ответы (1)


Я ответил на свой вопрос в своих обновленных комментариях выше. Я все еще хотел бы знать, является ли это рекомендуемым способом сделать это.

@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"])
)
person Mithrilhall    schedule 02.04.2013