以下是来自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传递给控制器?
答案 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
类型。或者,对于不兼容的类型,您将收到剃刀错误。