我怀疑您是否希望将网格作为表单的一部分。通常,网格通过 ajax 进行交互,而不是通过与其他控件一起提交的批处理表单 - 从表单中解开它。仅此一项可能会让您头疼。
上半场:
尝试使用 Kendo().DatePickerFor()、Kendo().DropDownListFor() 等。您不需要通过 .Name() 显式命名这些 Kendo 控件。这将帮助您进行模型绑定。
下半场:
使用十进制以外的其他数据类型。你觉得这很难吗?尝试使用 TimeSpan 类型来表示没有附加日期的时间(成年男子会哭)。
通常,您不需要用于布尔值/复选框的 EditorTemplate。只需使用这个技巧(假设您使用的是 Razor,因为您没有留下任何代码)。
columns.Bound(b => b.IsActive).ClientTemplate("<input type='checkbox' ${ IsActive == true ? checked='checked' : ''} disabled />");
Grid DDL 的最佳选择是
columns.ForeignKey(b => b.CustodianIdPrimary, Model.Custodians, "Id", "FullName").EditorViewData(new {ProjectId = Model.ProjectId}).EditorTemplateName("CustodianDropDownList");
其中 Model.Custodians 是所有可能项目的列表。然后,您可以将 EditorTemplate 绑定到此列表,或者如果您需要此特定 DDL 中的子集,则进行 ajax 调用以填充,如下所示
@model int
@(Html.Kendo().DropDownList()
.Name(ViewData.TemplateInfo.GetFullHtmlFieldName(""))
.DataValueField("Id")
.DataTextField("FullName")
.OptionLabel("Unassigned")
.DataSource(dataSource => dataSource
.Read(read => read.Action("ReadProjectCustodiansDdl", "SysMaint", new {projectId = ViewData["ProjectId"]}))
)
)
但这里是剑道提供的例子
@model object
@(
Html.Kendo().DropDownListFor(m => m)
.BindTo((SelectList)ViewData[ViewData.TemplateInfo.GetFullHtmlFieldName("") + "_Data"])
)
请注意在我的初始 columns.ForeignKey 中使用 EditorViewData 参数,在此示例中用于传递整个列表。
祝你好运!