Kendo web grid mvc层次结构数据源详细信息模板当本地数据

Kendo web grid mvc层次结构数据源详细信息模板当本地数据,grid,hierarchy,kendo-asp.net-mvc,Grid,Hierarchy,Kendo Asp.net Mvc,我在MVC中有一个剑道网格这是声明Html.kendo().grid(Model.Orders) 对象“Orders”有一个“Details”列表。我想使用ClientDetailTemplateId属性将此列表放在第二个网格中 我的问题是,既然“模型”已经有了数据,我如何设置模板的数据源,在层次结构的示例中,数据源在模板中调用控制器中的操作,而不是编写网格代码,调用局部视图并向其传递订单模型 <script id="template" type="text/kendo-tmpl">

我在MVC中有一个剑道网格这是声明Html.kendo().grid(Model.Orders)

对象“Orders”有一个“Details”列表。我想使用ClientDetailTemplateId属性将此列表放在第二个网格中


我的问题是,既然“模型”已经有了数据,我如何设置模板的数据源,在层次结构的示例中,数据源在模板中调用控制器中的操作,而不是编写网格代码,调用局部视图并向其传递订单模型

<script id="template" type="text/kendo-tmpl">
@Html.Partial("_Orders",Model.Order)
</script>

@Html.Partial(“_Orders”,Model.Order)
在这个局部视图中,编写剑道网格代码,模型为Orders model

局部视图

 @(Html.Kendo().Grid<Kendo.Mvc.Examples.Models.OrderViewModel>()
            .Name("grid_#=EmployeeID#")
            .Columns(columns =>
            {
                columns.Bound(o => o.OrderID).Width(70);
                columns.Bound(o => o.ShipCountry).Width(110);
                columns.Bound(o => o.ShipAddress);
                columns.Bound(o => o.ShipName).Width(200);
            })
            .DataSource(dataSource => dataSource
                .Ajax()
                .PageSize(5)
                .Read(read => read.Action("HierarchyBinding_Orders", "Grid", new { employeeID = "#=EmployeeID#" }))
            )
            .Pageable()
            .Sortable()
            .ToClientTemplate()
    )
@(Html.Kendo().Grid())
.Name(“grid##=EmployeeID#”)
.列(列=>
{
columns.Bound(o=>o.OrderID).Width(70);
columns.Bound(o=>o.ShipCountry).Width(110);
columns.Bound(o=>o.ShipAddress);
columns.Bound(o=>o.ShipName).Width(200);
})
.DataSource(DataSource=>DataSource
.Ajax()
.页面大小(5)
.Read(Read=>Read.Action(“HierarchyBinding_Orders”,“Grid”,new{employeeID=“#=employeeID#“}))
)
.Pageable()
.Sortable()
.ToClient模板()
)

我为此挣扎了很长一段时间,最终了解到这可以通过服务器绑定来完成

关键似乎是DetailTemplate中可用的(据我所知,未记录的)“item”变量,该变量提供“主”网格上的当前行,其中包含应绑定到详细网格的数据(“在您的情况下为Details”)

以下是来自Kendo的ServerHierarchy示例:

@model IEnumerable<Kendo.Mvc.Examples.Models.Employee>

@{ Html.Kendo().Grid(Model)
    .Name("Employees")
    .Columns(columns =>
    {
        columns.Bound(e => e.FirstName).Width(140);
        columns.Bound(e => e.LastName).Width(140);
        columns.Bound(e => e.Title).Width(200);
        columns.Bound(e => e.Country).Width(200);
        columns.Bound(e => e.City);
    })
    .DetailTemplate(
        @<text>           
            @(Html.Kendo().Grid(item.Orders)
                    .Name("Orders_" + item.EmployeeID)
                    .Columns(columns =>
                    {
                        columns.Bound(o => o.OrderID).Width(101);
                        columns.Bound(o => o.ShipCountry).Width(140);
                        columns.Bound(o => o.ShipAddress).Width(200);
                        columns.Bound(o => o.ShipName).Width(200);
                        columns.Bound(o => o.ShippedDate).Format("{0:d}");
                    })
                    .DataSource(dataSource => dataSource.Server())                    
                    .Pageable()
                    .Sortable()
                    .Filterable()
            )
        </text>
    )
    .RowAction(row => 
    {
        if (row.Index == 0)
        {
            row.DetailRow.Expanded = true;
        }
        else
        {
            var requestKeys = Request.QueryString.Keys.Cast<string>();
            var expanded = requestKeys.Any(key => key.StartsWith("Orders_" + row.DataItem.EmployeeID) ||
                key.StartsWith("OrderDetails_" + row.DataItem.EmployeeID));
            row.DetailRow.Expanded = expanded;
        }
    })
    .Pageable()
    .DataSource(dataSource => dataSource.Server().PageSize(5))    
    .Sortable()
    .Render();
} 
@model IEnumerable
@{Html.Kendo().Grid(模型)
.姓名(“雇员”)
.列(列=>
{
columns.Bound(e=>e.FirstName).Width(140);
columns.Bound(e=>e.LastName).Width(140);
columns.Bound(e=>e.Title).Width(200);
columns.Bound(e=>e.Country).Width(200);
columns.Bound(e=>e.City);
})
.DetailTemplate(
@           
@(Html.Kendo().Grid(item.Orders)
.Name(“订单”+项目.EmployeeID)
.列(列=>
{
columns.Bound(o=>o.OrderID).Width(101);
columns.Bound(o=>o.ShipCountry).Width(140);
columns.Bound(o=>o.ShipAddress).Width(200);
columns.Bound(o=>o.ShipName).Width(200);
columns.Bound(o=>o.ShippedDate).Format(“{0:d}”);
})
.DataSource(DataSource=>DataSource.Server())
.Pageable()
.Sortable()
.可过滤()
)
)
.RowAction(行=>
{
如果(row.Index==0)
{
row.DetailRow.Expanded=true;
}
其他的
{
var requestKeys=Request.QueryString.Keys.Cast();
var expanded=requestKeys.Any(key=>key.StartsWith(“订单”+行.数据项.雇员ID)||
key.StartsWith(“OrderDetails_”+row.DataItem.EmployeeID));
row.DetailRow.Expanded=已展开;
}
})
.Pageable()
.DataSource(DataSource=>DataSource.Server().PageSize(5))
.Sortable()
.Render();
} 

Hi,为什么要发送Model.Order,然后创建另一个网格?我需要的是第二个网格上“Order”中的详细信息。如何将该详细信息列表发送到此视图?@maldoxd这仅用于详细信息。我给你举了嵌套网格的例子。当你点击“细节”时,我会在细节中显示另一个网格。如果你不想要一个详细的网格,那么设计你想要的细节部分视图。你的代码帮助了我。谢谢。但我在进行排序、筛选等操作时出错。你知道为什么吗?