2014-02-05 72 views
1

我想要做的是創建一個網格,當你點擊它打開一個細節網格供用戶選擇。我創造了他們這樣Kendo Ui模型綁定3級對象

@(Html.Kendo().Grid(Model.items).Name("Access") 
.Columns(columns => 
{ 
    columns.Bound("ProjId").Width(220).Title("Project #");  
    })  
    .ClientDetailTemplateId("detailTemplateId") 
    .Selectable() 
    .Events(events => events.DetailInit("initDetailGrid"))           
    .DataSource(dataSource => dataSource 
    .Ajax() 
    .ServerOperation(false)     
) 
) 

<script id="detailTemplateId" type="text/kendo-tmpl"> 

@(Html.Kendo().Grid(Model.items.subItems).Name("detailGrid") 
.Columns(columns => columns.Bound("itemsName").Title("Select")) 
.DataSource(dataSource => dataSource 
         .Ajax() 
         .ServerOperation(false) 
         ) 
.ToClientTemplate() 
) 
</script> 

該模型是這樣的

public class ItemModel 
{   
    public List<myItems> items; 

    public ItemModel() 
    {   
     items = new List<myItems>(); 
    } 
} 

的myItems類別處定義創建,並且myItems類中的一個子類,這是我想的子項得到

public class myItems 
{ 
    public int ProjId; 
    public List<otherItems> subItems; 

    public myItems(){ 
     subItems = new List<otherItems>(); 
    } 
    public class otherItems() 
    {   
     public String itemsName; 
     public int itemId 
    } 
} 

但是當我試圖在這裏將它綁定@(Html.Kendo().Grid(Model.items.subItems).Name("detailGrid") 說,它不能解析符號?我是否正確地做這件事?還是必須將它綁定到項目,然後使用列模板獲取列內的值?

回答

0

基本上與服務器綁定網格打交道時,你應該使用DetailTemplate,而不是DetailTemplateID

下面是一個例子:

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

@helper ThirdLevelHelper(Kendo.Mvc.Examples.Models.Product x) 
{ 

     @(Html.Kendo().Grid(Model)  
     .Name("Grid"+Guid.NewGuid()) 
     .Columns(columns => { 
      columns.Bound(p => p.ProductID).Groupable(false); 
      columns.Bound(p => p.ProductName); 
      columns.Bound(p => p.UnitPrice); 
      columns.Bound(p => p.UnitsInStock); 
     }) 
     .Pageable() 
     .Sortable() 
     .Scrollable() 
     .Filterable() 
     .Groupable() 
    ) 
} 

@(Html.Kendo().Grid(Model)  
    .Name("Grid") 
    .Columns(columns => { 
     columns.Bound(p => p.ProductID).Groupable(false); 
     columns.Bound(p => p.ProductName); 
     columns.Bound(p => p.UnitPrice); 
     columns.Bound(p => p.UnitsInStock); 
    }) 
    .DetailTemplate(@<text> 
@(Html.Kendo().Grid(Model)  
    .Name("Grid"+item.ProductID) 
    .Columns(columns => { 
     columns.Bound(p => p.ProductID).Groupable(false); 
     columns.Bound(p => p.ProductName); 
     columns.Bound(p => p.UnitPrice); 
     columns.Bound(p => p.UnitsInStock); 
    }) 
    .DetailTemplate(x=>ThirdLevelHelper(x)) 
    .Pageable() 
    .Sortable() 
    .Scrollable() 
    .Filterable() 
    .Groupable() 
) 
</text>) 
    .Pageable() 
    .Sortable() 
    .Scrollable() 
    .Filterable() 
    .Groupable() 
) 

Nitice,對於層級的第三級,你會必須使用助手方法,因爲Razor不允許嵌套@操作符。

您還必須找到一種方法並確保每個網格控件在層次結構中的名稱都是唯一的。這通常通過啓動sufix來完成。

另外仔細看一下,看看上下文是如何傳播到嵌套的網格,通過傳遞當前項目,使用助手時略有不同。