我有一个在网格中使用的ViewModel。 让我们将其命名为DivisionVm
public class DivisionVm {
public int DivisionId
public string Name
public DateTime StartDate { get; set; }
public string Condition
....
}
当我想更新模型时,我使用自定义编辑器模板。因为Condition需要一些预定义的字符串值,所以我在模板中使用了一个下拉列表。
@(Html.Kendo().DropDownListFor(model=>model.Condition)
.DataTextField("Text")
.DataValueField("Condition")
.Events(e => e.Change("change"))
.BindTo(new List<ConditionVm>() {
new ConditionVm() {
Text = "Red",
Condition = "Red"
},
new ConditionVm() {
Text = "Green",
Condition = "Green"
},
new ConditionVm() {
Text = "Green",
Condition = "Green"
}
})
)
ConditionVm只是一个用于绑定的视图模型
public class ConditionVm
{
public string Text { get; set; }
public string Condition { get; set; }
}
我的问题是,当弹出编辑器打开时,它会在下拉列表中显示当前条件值。但是如果我从列表中选择另一个值,则kendo不会跟踪更改。如果我按下更新按钮,则viemodel不会更新。如果我更改其他字段(例如名称),则模型正在更新但仅针对这些字段。条件仍然存在即使我从下拉列表中选择了另一个值,也是一样的。
我的控制器更新方法是这样的
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult DivisionGridUpdate([DataSourceRequest] DataSourceRequest request, DivisionVm division)
{
if (division != null && ModelState.IsValid)
{
......
}
return Json(new[] { division }.ToDataSourceResult(request, ModelState));
}
答案 0 :(得分:0)
您是否尝试过网格设置DDL的列,就像一个foreing Key?
像这样:
columns.ForeignKey(p => p.yourproperty, (System.Collections.IEnumerable)ViewData["myList"], "Text", "Condition");
控制器(在这里填写列表将填写下拉列表:
ViewData["myList"] = myList.Select(e => new
{
Text= e.Text,
Condition= e.Condition
});
在弹出式编辑器中你很简单:
@Html.EditorFor(model=>model.yourproperty)