У меня есть сетка Кендо с пользовательской кнопкой редактирования для каждой строки. Когда пользователь нажимает кнопку редактирования, открывается модальное окно, в котором пользователь может редактировать информацию и сохранять изменения.
Я добавил шаблон редактора для отображения раскрывающегося списка сокращений штатов.
Редактор штатов.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"])
)