父网格详细信息模板内的网格中的 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
类型。或者你会得到不兼容类型的剃刀错误。
这是来自 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
类型。或者你会得到不兼容类型的剃刀错误。