kendo ui mvc grid editortemplate问题

时间:2013-02-19 18:32:29

标签: asp.net-mvc user-interface grid kendo-ui

我想做什么:

  1. 我在页面的前半部分有一个带有Kendo UI控件的表单,如DatePicker,Dropdownlist,NumericTextBox

  2. 下半部分有一个Kendo UI MVC网格控件

    • 此Kendo UI网格控件有8列,其中2列包含Kendo下拉列表(EditorTemplate)和CheckBox(EditorTemplate)。
    • Kendo UI Grid控件是Ajax绑定。
  3. 单击保存按钮时,来自Kendo UI控件(上半部分)和Kendo UI网格控件(后半部分)的所有值将通过“Ajax Post”发布为控制器的Json对象。

  4. 我正在使用模型绑定进行上述过程

  5. 我面临的问题或问题:

    表单的前半部分与其他Kendo UI控件一起正确地将它们的值发布到控制器,但是Kendo UI Grid在发布一些列值时出现了一些问题

    • 数据类型为十进制的Kendo UI Grid中的列未发布值

    • EditorTemplate控件如CheckBox和kendo下拉列表在选中时显示下拉列表的值"[Object Object]"以及布尔值的实际值而不是复选框控件。

1 个答案:

答案 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参数,该示例用于传递整个列表。

祝你好运!