Kendo UI MVC Grid - 数据源干扰列模板

时间:2014-12-02 20:45:31

标签: c# asp.net-mvc kendo-ui kendo-grid kendo-asp.net-mvc

我有一个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;列并进行客户端排序和过滤?

1 个答案:

答案 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