【问题标题】:Custom Command that invokes 2nd Editable Popup调用第二个可编辑弹出窗口的自定义命令
【发布时间】:2016-04-20 11:25:25
【问题描述】:

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

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

我在这里看过这个演示 --> 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

【问题讨论】:

  • 您想从网格中编辑一行,还是您想在自定义窗口中编辑一些其他数据?
  • 抱歉,我会将我的模型添加到我的问题中,谢谢。
  • 无需添加模型。我只是不明白您的问题是否与网格编辑有关?

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


【解决方案1】:

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

【讨论】:

  • 感谢您的回复,我会尝试一下,但这不只是在我已经拥有的编辑弹出窗口中创建一个网格吗?如果是这样,我需要将它放在单独的弹出窗口中,这就是我的要求的奇怪之处。他们希望同时查看所有数据,但有 2 个不同的编辑工作流程。有意义吗?
  • 你不能用hierarchical grids吗?
  • 嗯,我不这么认为,除非我可以为每个弹出窗口。我不得不环顾四周,因为我什至不确定这是否可能......
  • 我相信您可以对每个弹出窗口进行编辑。只需确保在孩子的编辑事件中设置父 ID。不幸的是,如果您需要制作一些与演示不相似的自定义 UI,您将需要编写大量难以维护的 javascript。
  • 好的,很酷。我一定会根据你的回答试一试。这不会是“他们”所要求的,但非常接近所以希望如此!
猜你喜欢
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多