我有一个剑道网格,每行都有一个自定义编辑按钮。当用户单击编辑按钮时,将打开一个模式窗口,用户可以在其中编辑信息并保存更改。
我添加了一个编辑器模板来显示状态缩写的下拉列表。
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”的状态模型的模型。
如何将我的下拉列表设置为我传入的状态?
更新:
我不知道这是否是正确的方法,但这就是我修复它的方法。只需添加 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"])
)