我想做什么:
我在页面的前半部分有一个带有Kendo UI控件的表单,如DatePicker,Dropdownlist,NumericTextBox
下半部分有一个Kendo UI MVC网格控件
单击保存按钮时,来自Kendo UI控件(上半部分)和Kendo UI网格控件(后半部分)的所有值将通过“Ajax Post”发布为控制器的Json对象。
我正在使用模型绑定进行上述过程
我面临的问题或问题:
表单的前半部分与其他Kendo UI控件一起正确地将它们的值发布到控制器,但是Kendo UI Grid在发布一些列值时出现了一些问题
数据类型为十进制的Kendo UI Grid中的列未发布值
EditorTemplate控件如CheckBox和kendo下拉列表在选中时显示下拉列表的值"[Object Object]"
以及布尔值的实际值而不是复选框控件。
答案 0 :(得分:4)
我怀疑你希望Grid作为Form的一部分。通常,Grid通过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绑定到此List,或者如果您需要此特定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参数,该示例用于传递整个列表。
祝你好运!