我猜你需要在弹出编辑器内的另一个网格中编辑孩子(在MVC editor template 内)。子网格需要绑定到它自己的控制器/动作,这些控制器/动作将父 ID (modelA_ID) 作为输入参数。
主网格可能如下所示:
@(Html.Kendo().Grid<ModelA>()
.Name("grid")
.Columns(columns =>
{
columns.Bound(e => e.Name);
columns.Command(command =>
{
command.Edit();
command.Destroy();
});
})
.ToolBar(tools => tools.Create())
.Editable(editable => editable
.Mode(Kendo.Mvc.UI.GridEditMode.PopUp)
.TemplateName("MyTemplate"))
.Pageable().Sortable().Filterable()
.DataSource(source => source.Ajax()
.Model(model => model.Id(e => e.ID))
.Read(read => read.Action("Read_ModelA", "MyController"))
.Update(update => update.Action("Update_ModelA", "MyController"))
.Create(create => create.Action("Create_ModelA", "MyController"))
.Destroy(destroy => destroy.Action("Destroy_ModelA", "MyController"))))
在编辑器模板 (MyTemplate.cshtml) 中,您可能有:
@model ModelA
@Html.HiddenFor(m => m.ModelA_ID)
@(Html.Kendo().Grid<ModelB>()
.Name("childGrid")
.Columns(columns =>
{
columns.Bound(o => o.Role);
columns.Command(command =>
{
command.Edit();
command.Destroy();
});
})
.ToolBar(tools => tools.Create())
.Editable(editable => editable
.Mode(Kendo.Mvc.UI.GridEditMode.InLine))
.Pageable().Sortable().Filterable()
.DataSource(source => source.Ajax()
.Model(model => model.Id(e => e.ID))
.Read(read => read.Action("Read_ModelB", "MyController").Data("getCurrentParentId"))
.Create(create => create.Action("Create_ModelB", "MyController").Data("getCurrentParentId"))
.Update(update => update.Action("Update_ModelB", "MyController"))
.Destroy(destroy => destroy.Action("Destroy_ModelB", "MyController")))
.ToClientTemplate()
)
而 javascript 函数 getCurrentParentId 看起来像这样:
function getCurrentParentId() {
return {
modelA_ID: $('#ModelA_ID').val()
}
}