使用编辑器下拉列表值更新Kendo网格

时间:2013-08-15 20:49:47

标签: asp.net-mvc razor drop-down-menu kendo-grid mvc-editor-templates

我有一个Kendo网格设置如下:

@(Html.Kendo().Grid<ParticipatingDentalEE>()
.Name("DentalEE")
.Columns(columns =>
{
    columns.Bound(p => p.State).Title("State").Width(150).EditorTemplateName("State");
    columns.Bound(p => p.Count).Title("Count").Width(150);
    columns.Command(c => { c.Edit(); c.Destroy(); });
})
.DataSource(dataSource => dataSource
    .Ajax()           
    .Model(m => {
        m.Id(p => p.State);
        m.Field(p => p.State).Editable(true);
        m.Field(p => p.Count).Editable(true).DefaultValue("");
    })
    .Create(update => update.Action("EditingInline_Create", "Dental"))
    .Read(read => read.Action("EditingInline_Read", "Dental"))
    .Update(update => update.Action("EditingInline_Update", "Dental"))
    .Destroy(update => update.Action("EditingInline_Destroy", "Dental"))
)
//.Scrollable()
//.Sortable()
.Editable(e => e.Mode(GridEditMode.InLine))

“州”列包含一个下拉模板,如下所示:

@(Html.Kendo().DropDownList()
    .Name("States") // Name of the widget should be the same as the name of the property
    .DataValueField("CODE") // The value of the dropdown is taken from the EmployeeID property
    .DataTextField("NAME") // The text of the items is taken from the EmployeeName property
    .BindTo((System.Collections.IEnumerable)ViewData["States"]) // A list of all employees which is populated in the controller
)

当我编辑或创建项目时,我的下拉列表会正确显示,但是当我保存项目时,下拉值不会保留在网格中。为了做到这一点,我还需要设置其他东西吗?

3 个答案:

答案 0 :(得分:4)

正如你在自己的评论中所说,

.Name("States") // Name of the widget should be the same as the name of the property

也就是说,它必须与列的名称匹配,列名称为“State”而不是“States”。

答案 1 :(得分:3)

显然这是一个旧线程,但修复方法是使用DropDownListFor方法(而不是DropDownList)而不是指定名称。我怀疑Kendo做了一些内部名称匹配,以将编辑后的值应用回模型。

@model int // ...or whatever type works for your model

@(Html.Kendo().DropDownListFor(i => i)
    .DataValueField("CODE")
    .DataTextField("NAME")
    .BindTo((System.Collections.IEnumerable)ViewData["States"]))

答案 2 :(得分:0)

我不确定这是否能解决您的问题,但在我在模型中设置UIHint装饰器之前,我的网格的编辑器模板无法正常工作视图中的EditorTemplateName

E.g。

public class ParticipatingDentalEE {
   ...

   [UIHint("State")] // this should be the name of your EditorTemplate
   public State State { get; set; }

}

我推测在{view'模式下UIHint用于网格,而在'edit'模式下使用EditorTemplateName,并且两者都需要将两者链接在一起。