1

我正在尝试做的事情:

  1. 我在页面的前半部分有一个带有诸如 DatePicker(s)、Dropdownlist(s)、NumericTextBox(s) 等 Kendo UI 控件的表单

  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 中数据类型为小数的列未发布值

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

4

1 回答 1

5

我怀疑您是否希望将网格作为表单的一部分。通常,网格通过 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 参数,在此示例中用于传递整个列表。

祝你好运!

于 2013-02-20T03:51:55.523 回答