在父网格细节模板中的网格中的CRUD操作



以下是Telerik网站上Kendo Grid Detail Template演示的示例代码(我通过删除选项卡条简化了Detail模板):

@(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>

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

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

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

您不应该将EmployeeID值设置为其创建传输中的参数。因为你将在这里做POST请求,正确的做法是将该值作为Grid模型的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类型。

最新更新