3
我有一个Kendo MVC网格,它包含一个绑定为外键并将下拉列表用作编辑器模板的可空属性(简称)。我也在使用内联编辑。Kendo Grid:更新后外键下拉不更新网格单元
当属性值为空时,单击更新按钮后,下拉列表选定值不会被设置到网格单元格中。如果使用incell编辑,这工作正常。我正在寻找解决方法来解决我的问题。我在下面包括我的代码的精简版本
如果可空值设置为非空值,则一切正常。
GRID
@(Html.Kendo().Grid<AssetViewModel>()
.Name("DealAssets")
.Columns(c =>
{
c.Bound(x => x.Name);
c.ForeignKey(x => x.AssetTypeID, (IEnumerable<SelectListItem>)ViewBag.AssetTypeList, "Value", "Text");
c.ForeignKey(x => x.SeniorityTypeID, seniorityTypeList, "Value", "Text").EditorTemplateName("GridNullableForeignKey");
c.ForeignKey(x => x.RateBaseID, rateBaseList, "Value", "Text").EditorTemplateName("GridNullableForeignKey"); ;
c.Command(m => { m.Edit(); m.Destroy(); });
})
.ToolBar(toolbar => toolbar.Create().Text("Add New Asset"))
.Editable(x => x.Mode(GridEditMode.InLine))
.DataSource(ds => ds
.Ajax()
.Model(model => model.Id(request => request.ID))
.Read(read => read.Action("ReadAssets", "Deal", new { id = Model.ID }))
.Create(create => create.Action("CreateAsset", "Deal", new { currentDealID = Model.ID }))
.Update(update => update.Action("UpdateAsset", "Deal"))
.Destroy(destroy => destroy.Action("DeleteAsset", "Deal"))
)
)
EDITOR模板
@model short?
@{
var controlName = ViewData.TemplateInfo.GetFullHtmlFieldName("");
}
@(
Html.Kendo().DropDownListFor(m => m)
.Name(controlName)
.OptionLabel("- Please select -")
.BindTo((SelectList)ViewData[ViewData.TemplateInfo.GetFullHtmlFieldName("") + "_Data"])
)
更新动作
public ActionResult UpdateAsset([DataSourceRequest] DataSourceRequest request, int ID)
{
var dealAsset = DataContext.DealAssets.SingleOrDefault(o => o.ID == ID);
if (dealAsset != null)
{
if (TryUpdateModel(dealAsset.Asset, new[] {"Name","AssetTypeID","SeniorityTypeID","RateBaseID" }))
{
DataContext.SaveChanges();
}
}
return Json(new[] { new AssetViewModel(dealAsset) }.ToDataSourceResult(request, ModelState), JsonRequestBehavior.AllowGet);
}
+1。你刚刚救了我头痛!只有一件事,如果我将它包含在'GridForeignKey.cshtml'模板中,是否会导致其他非空字段的问题? – 1nfected
我不确定。如果您在使用非空字段时遇到问题,则可以在模型上使用UIHint属性来指定要使用的特定编辑器模板。 –