kendo ui mvc 网格编辑器模板问题

Sha*_*nth 1 asp.net-mvc grid user-interface kendo-ui

我正在尝试做的事情:

  1. 我有一个包含 Kendo UI 控件的表单,如页面前半部分的 DatePicker(s)、Dropdownlist(s)、NumericTextBox(s)

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

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

  4. 我在上述过程中使用模型绑定

问题或我面临的问题:

带有其他 Kendo UI 控件的表单的前半部分将它们的值正确地发布到控制器,但是由于 Kendo UI Grid 在发布某些列值时遇到了一些问题

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

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

Tre*_*ann 5

我怀疑您是否希望将 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 />");
Run Code Online (Sandbox Code Playgroud)

Grid DDL 的最佳选择是

columns.ForeignKey(b => b.CustodianIdPrimary, Model.Custodians, "Id", "FullName").EditorViewData(new {ProjectId = Model.ProjectId}).EditorTemplateName("CustodianDropDownList");
Run Code Online (Sandbox Code Playgroud)

其中 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"]}))
    )
)
Run Code Online (Sandbox Code Playgroud)

但这里是剑道提供的例子

@model object       
@(
    Html.Kendo().DropDownListFor(m => m)        
        .BindTo((SelectList)ViewData[ViewData.TemplateInfo.GetFullHtmlFieldName("") + "_Data"])
)
Run Code Online (Sandbox Code Playgroud)

请注意在我的初始列中使用 EditorViewData 参数。ForeignKey,在本示例中用于传递整个列表。

祝你好运!