网格到网格弹出编辑器 - 在子网格中传递ID参数

时间:2012-11-14 18:23:45

标签: asp.net-mvc razor kendo-ui

我有一个雇员网格。有一个编辑按钮,编辑模式设置为弹出窗口。在我想要编辑的实体的EditorTemplate中,有另一个网格,其中包含具有incell或内联编辑模式的Salary历史记录。

两个网格都使用Ajax数据源。问题在于内部网格绑定。将Json结果提供给ajax调用的控制器操作需要我们正在编辑的employee的ID返回适当的Salary历史记录。但是,Kendo UI ASP.NET MVC包装器会在知道我们要编辑哪个员工之前呈现编辑器的某种模板,然后在我们请求弹出窗口时编辑它。

如何在Read Ajax调用中提供Employe ID?

主网格

@(Html.Kendo().Grid<MyProject.Business.Models.EmployeDTO>().Name("EmployeGrid")
.ToolBar(toolbar => toolbar.Create())
.Columns(cols =>
{
    cols.Bound(o => o.someData).Title("Some Data");
    cols.Bound(o => o.moreData).Title("More Data");
    cols.Command(o =>
    {
            o.Edit();
        o.Destroy();
    }).Title("&nbsp;");
})
.Editable(editor => editor
    .Mode(GridEditMode.PopUp)
    .Window(window => window.Draggable().Resizable().HtmlAttributes(new { @style = "width:700px;" })))
.Sortable()
.Filterable()
.Groupable()
.DataSource(datasource => datasource
    .Ajax()
    .Model(model => model.Id(o => o.id))
    .Read(read => read.Action("GetAll", "EmployesAjax"))
    .Update(update => update.Action("Update", "EmployesAjax"))
    .Create(create => create.Action("Create", "EmployesAjax"))
    .Destroy(destroy => destroy.Action("Destroy", "EmployesAjax"))
    )
)

内部网格(在Views / Shared / EditorTemplates / EmployeDTO.cshtml中)

@Html.Kendo().Grid<MyProject.Business.Models.SalairyDTO>().Name("SalaryGrid")
.Columns(cols =>
{
    cols.Bound(o => o.someInfo).Title("Some Info");
})
.DataSource(datasource => datasource
    .Ajax()
    .Model(model =>
    {
        model.Id(o => o.id);
        model.Field(o => o.employe_id).DefaultValue(Model.id);
    })

    // NEED THE ID HERE
    .Read(read => read.Action("GetByEmployeId", "SalairyAjax", new { id = "" }))

    .Update(update => update.Action("Update", "SalairyAjax"))
    .Create(create => create.Action("Create", "SalairyAjax"))
    .Destroy(destroy => destroy.Action("Destroy", "SalairyAjax"))));

2 个答案:

答案 0 :(得分:3)

基本上我建议你将AutoBind选项设置为内部Grid的false,并使用外部Grid的edit事件来执行读取请求并将该值作为附加参数传递。

以下是一个例子:

function onEditOfEmployeGrid(e){
    $('#SalaryGrid').data().kendoGrid.dataSource.read({id:e.model.EmployeeID})
}

答案 1 :(得分:0)

您可以使用网格中的addtionaldata参数从网格中传递值。然后可以使用ViewData [“RouteID”]在网格弹出编辑器中引用(左侧)上的RouteID。我希望有帮助

     .Editable(editable => editable.Mode(GridEditMode.PopUp)
         .TemplateName("busStop")
         .DisplayDeleteConfirmation(true)
         .Window(window => window.Modal(true).Resizable().Draggable())
         .AdditionalViewData(new { RouteID = Model.RouteID }))