我有一个Kendo UI MVC Helper Grid,它存在模板化列的问题。我的问题是我不想使用服务器端调用进行过滤或排序。当我禁用服务器端数据源时,我的模板不会呈现" name"柱。这是我的代码:
@(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))
然后模板在&#34; name&#34;上正常工作列,但页面执行回发,这对于网格来说是过度的。如果我将其取消注释,那么&#34; name&#34;中的单元格列全部呈现为纯文本(不存在锚标记),但我有客户端排序和过滤。
我需要更改以允许模板在&#34; name&#34;列并进行客户端排序和过滤?
答案 0 :(得分:3)
.DataSource(d => d.Ajax().ServerOperation(false))
推断您的网格将通过ajax远程加载其数据,但是您在初始化的最初阶段为网格提供数据(Model.Contacts):
@(Html.Kendo().Grid(Model.Contacts)
通过从一开始就将Model.Contacts加载到网格中,网格被视为服务器绑定,而通过提供该数据源,您的网格将被视为 ajax绑定。
Per Kendo文档中,ajax绑定网格无法利用服务器模板,这将考虑您的名称列模板。
如果Model.Contacts真正包含您需要加载的所有数据,我将完全删除数据源,因为您拥有所需的所有数据。
如果你想通过ajax加载数据,你应该删除Model.Contacts并初始化网格,如:
@(Html.Kendo().Grid<Contact>()
并使用配置的读传输方法添加数据源。
查看Kendo Grid FAQ的这一部分(第二个问题):
http://docs.telerik.com/kendo-ui/aspnet-mvc/helpers/grid/faq