我要做的事情:
-
我有一个带有Kendo UI控件的表单,如页面的前半部分的DatePicker、Dropdownlist、NumericTextBox
-
下半场有一个剑道UI MVC网格控制
- 这个Kendo UI网格控件有8列,其中2列有一个Kendo dropdownlist(EditorTemplate)和CheckBox(EditorTemplate)
- Kendo UI网格控件是Ajax绑定
-
当单击保存按钮时,Kendo UI控件(前半部分)和Kendo UI网格控件(后半部分)中的所有值都将通过"Ajax Post"作为Json对象发布到控制器。
-
我使用模型绑定进行上述过程
问题或我面临的问题:
表单的前半部分和其他Kendo UI控件正在将它们的值正确地发布到控制器,但由于Kendo UI网格在发布一些列值时遇到了一些问题
-
Kendo UI网格中数据类型为decimal的列没有发布值
-
EditorTemplate控件(如CheckBox和kendo下拉列表)在选中时显示dropdownlist的值
"[Object Object]"
和布尔值的实际值,而不是复选框控件。
我怀疑你是否希望将网格作为表单的一部分。通常,网格通过ajax进行交互,而不是通过与其他控件的批量表单提交进行交互-从表单中打开它。仅此一点可能会让你头疼。
上半场:
尝试使用Kendo().DatePickerFor()、Kendo(().DropDownListFor()等。您不需要通过.name()显式命名这些Kendo控件。这将帮助您进行模型绑定。
下半场:
使用十进制以外的其他数据类型。你觉得这很难吗?试着用TimeSpan类型来表示一天中没有日期的时间(成年男子会哭)。
通常,您不需要用于布尔值/复选框的EditorTemplate。只要使用这个技巧(假设你正在使用Razor,因为你没有留下代码)。
columns.Bound(b => b.IsActive).ClientTemplate("<input type='checkbox' ${ IsActive == true ? checked='checked' : ''} disabled />");
你的网格DDL的最佳选择是
columns.ForeignKey(b => b.CustodianIdPrimary, Model.Custodians, "Id", "FullName").EditorViewData(new {ProjectId = Model.ProjectId}).EditorTemplateName("CustodianDropDownList");
其中,模型保管人是所有可能项目的列表。然后,您可以将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"]}))
)
)
但这是Kendo提供的示例
@model object
@(
Html.Kendo().DropDownListFor(m => m)
.BindTo((SelectList)ViewData[ViewData.TemplateInfo.GetFullHtmlFieldName("") + "_Data"])
)
请注意在我的初始列中使用了EditorViewData参数。ForeignKey,用于传递整个列表。
祝你好运!