父网格详细信息模板内的网格中的 CRUD 操作

CRUD operations in a grid inside a parent grid detail template

这是来自 Telerik 网站上 Kendo 网格详细信息模板 demo 的示例代码(我通过删除标签条简化了详细信息模板):

@(Html.Kendo().Grid<Kendo.Mvc.Examples.Models.EmployeeViewModel>()
    .Name("grid")
    .Columns(columns =>
    {
        columns.Bound(e => e.FirstName).Width(120);
        columns.Bound(e => e.LastName).Width(120);
        columns.Bound(e => e.Country).Width(120);
        columns.Bound(e => e.City).Width(120);
        columns.Bound(e => e.Title);
    })
    .Sortable()
    .Pageable()
    .Scrollable()
    .ClientDetailTemplateId("template")
    .HtmlAttributes(new { style = "height:430px;" })
    .DataSource(dataSource => dataSource
        .Ajax()
        .PageSize(5)
        .Read(read => read.Action("HierarchyBinding_Employees", "Grid"))
    )
    .Events(events => events.DataBound("dataBound"))
)

<script id="template" type="text/kendo-tmpl">
       @(Html.Kendo().Grid<Kendo.Mvc.Examples.Models.OrderViewModel>()
            .Name("grid_#=EmployeeID#")
            .Columns(columns =>
            {
                columns.Bound(o => o.OrderID).Title("ID").Width(56);
                columns.Bound(o => o.ShipCountry).Width(110);
                columns.Bound(o => o.ShipAddress);
                columns.Bound(o => o.ShipName).Width(190);
            })
            .DataSource(dataSource => dataSource
                .Ajax()
                .PageSize(5)
                .Read(read => read.Action("HierarchyBinding_Orders", "Grid", new { employeeID = "#=EmployeeID#" }))
            )
            .Pageable()
            .Sortable()
            .ToClientTemplate()
        )
</script>

我想在模板内的子网格(订单网格)中添加一个创建按钮。问题是,当添加新订单时,我需要将 EmployeeID 传递给控制器​​,但以下内容不起作用,即使它适用于读取操作:

.Create(create => create.Action("AddOrder", "Grid", new { employeeID = "#=EmployeeID#" }))

在详细信息模板中向网格添加新项目时,如何将 EmployeeID 传递给控制器​​?

您不应在其创建传输中将 EmployeeID 值设置为参数。因为你会在这里做POST请求,所以正确的做法是将值作为网格模型EmployeeID的默认值传递。

你的内部网格应该有这样的配置数据源

.DataSource(ds=> ds.Ajax()
                   .PageSize(5)
                   .Read(read => read.Action("HierarchyBinding_Orders", "Grid", new { employeeID = "#: EmployeeID #" }))
                   .Create(create => create.Action("AddOrder", "Grid"))
                   .Model(model => 
                          {
                              model.Id(f => f.OrderID)
                              model.Field(f => f.EmployeeID).DefaultValue("#: EmployeeID #")
                           })
            )

当您向服务器添加新记录时,其 EmployeeID 值已设置。

注意:由于表达式"#= #",EmployeeID 将由string 值赋值,您应该将EmployeeID 设置为string 类型。或者你会得到不兼容类型的剃刀错误。