我有一个Kendo网格,每行有一个自定义编辑按钮。当用户单击编辑按钮时,将打开一个模态窗口,用户可以在其中编辑信息并保存更改。
我添加了一个编辑模板来显示州缩写的下拉列表。
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"])
)
答案 0 :(得分: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"])
)