2014-12-02 130 views
0

我有一個Kendo UI MVC Helper Grid與模板列有問題。我的問題是我不想使用服務器端調用進行過濾或排序。當我禁用服務器端數據源時,我的模板不會呈現「名稱」列。這裏是我的代碼:Kendo UI MVC Grid - DataSource干擾列模板

@(Html.Kendo().Grid(Model.Contacts) 
    .Name("contactGrid") 
    .Columns(c => 
    { 
     c.Bound(p => p.Name).Title("Contact Name").Template(@<text><a href="/contact-details/@item.Id" target="_blank">@item.Name</a></text>); 
     c.Bound(p => p.Id).Title("Unique ID"); 
    }) 
    .Sortable(s => s.SortMode(GridSortMode.SingleColumn).AllowUnsort(true)) 
    .Scrollable(s => s.Height(430)) 
    .Filterable(f => f.Extra(false).Operators(o => o.ForString(s => s.Contains("Contains")))) 
    .DataSource(d => d.Ajax().ServerOperation(false)) 
) 

如果我註釋掉像這樣的數據源:

//.DataSource(d => d.Ajax().ServerOperation(false)) 

則模板正常工作的「名稱」一欄,但頁並回發,這是爲了電網的目的而過度殺傷。如果我不留下注釋,那麼「名稱」列中的單元格都會呈現爲純文本(不存在錨定標記),但我有客戶端排序和過濾。

我需要更改以允許「名稱」列上的模板並進行客戶端排序和過濾?

回答

3
.DataSource(d => d.Ajax().ServerOperation(false)) 

推斷網格將通過AJAX的遠程加載它的數據,但你在初始化的一開始就提供了網格中的數據(Model.Contacts):

@(Html.Kendo().Grid(Model.Contacts) 

通過加載Model.Contacts從網格開始,網格被認爲是服務器綁定,而通過提供該數據源,您的網格將被視爲ajax綁定

每Kendo文檔ajax綁定網格不能利用服務器模板,這是您的名稱列模板將被考慮。

如果Model.Contacts真正包含您需要加載的所有數據,我會完全刪除數據源,因爲您擁有所有需要的數據。

如果你想通過Ajax加載數據時,你應該刪除Model.Contacts和初始化網格是這樣的:

@(Html.Kendo().Grid<Contact>() 

,並添加與配置讀傳送方法的數據源。

退房劍道網FAQ的這一部分(第二個問題下):

http://docs.telerik.com/kendo-ui/aspnet-mvc/helpers/grid/faq