我有一个Kendo UI MVC帮助器网格,该网格与模板列有关。我的问题是我不想使用服务器端调用进行过滤或排序。当我禁用服务器端数据源时,我的模板不会为“名称”列呈现。这是我的代码:
@(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))
那么该模板就可以在“名称”列上正常工作,但是该页面会进行回发,这对于网格而言是过大的。如果我不对其进行注释,那么“名称”列中的单元格都将呈现为纯文本(不存在锚标记),但是我具有客户端排序和过滤功能。
我需要更改什么以允许“名称”列上的模板并进行客户端排序和过滤?
.DataSource(d => d.Ajax().ServerOperation(false))
推断您的网格将通过ajax远程加载其数据,但是您要在初始化的一开始就为网格提供数据(Model.Contacts):
@(Html.Kendo().Grid(Model.Contacts)
通过从一开始就将Model.Contacts加载到网格中,该网格被视为服务器绑定,而通过提供该数据源,您的网格将被视为ajax绑定。
根据Kendo文档,Ajax绑定的网格无法利用服务器模板,这就是您要考虑的name列模板。
如果Model.Contacts确实包含您需要加载的所有数据,那么我将完全删除数据源,因为您拥有所需的所有数据。
如果您确实想通过ajax加载数据,则应删除Model.Contacts并初始化网格,如下所示:
@(Html.Kendo().Grid<Contact>()
并在配置了读取传输方法的情况下添加数据源。
查看Kendo Grid常见问题解答的这一部分(第二个问题向下):
http://docs.telerik.com/kendo-ui/aspnet-mvc/helpers/grid/faq
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句