调用第二个可编辑弹出窗口的自定义命令

时间:2016-04-20 11:25:25

标签: asp.net-mvc telerik kendo-grid kendo-asp.net-mvc telerik-grid

我有一个MVC 5应用程序,我正在使用Telerik Grid。到目前为止一切都很好。

除了我尝试使用调用可编辑弹出窗口的自定义命令,就像编辑命令设置为GridEditMode.Popup时一样。这将显示Grid绑定到的模型中的数据子集。

我在这里看过这个演示 - > http://demos.telerik.com/aspnet-mvc/grid/custom-command 在自定义命令,但我想知道如何将其转换为可编辑的屏幕。

我意识到这有点模糊,但我不确定在这一点上要问什么,更具体的问题?如果我不得不尝试,我想我想知道是否有替代方法可以手动构建整个编辑屏幕,在html中,并将其嵌入到该页面上,就像演示节目一样。

我有以下型号。我正试图让孩子,ModelB,在它自己的弹出窗口。

ModelA 
Guid          ID
string        Name
IList<ModelB> Roles

ModelB
Guid          ID
Guid          ModelA_ID
string        Role

1 个答案:

答案 0 :(得分:2)

我猜你需要在弹出编辑器中的另一个网格中编辑子项(在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()
    }
}