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

时间:2015-05-25 20:33:53

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

以下是来自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传递给控制器​​,但以下操作不起作用,即使它适用于Read操作:

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

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

1 个答案:

答案 0 :(得分:1)

您不应在其创建传输中将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值已设置。

注意:由于此string表达式,因此"#= #"值将指定EmployeeID,您应将EmployeeID设置为string类型。或者,对于不兼容的类型,您将收到剃刀错误。