【问题标题】:Kendo UI MVC Grid - DataSource Interfering With Column TemplateKendo UI MVC Grid - 干扰列模板的数据源
【发布时间】:2014-12-02 20:45:30
【问题描述】:

我有一个 Kendo UI MVC Helper Grid,它的模板列存在问题。我的问题是我不想使用服务器端调用进行过滤或排序。当我禁用服务器端数据源时,我的模板不会为“名称”列呈现。这是我的代码:

@(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))

然后模板在“名称”列上正常工作,但页面执行回发,这对于网格来说是多余的。如果我不加注释,那么“名称”列中的单元格都呈现为纯文本(不存在锚标记),但我有客户端排序和过滤。

我需要更改什么以允许“名称”列上的模板并进行客户端排序和过滤?

【问题讨论】:

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


    【解决方案1】:
    .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>()
    

    并添加配置了读取传输方法的数据源。

    查看剑道网格常见问题解答的这一部分(第二个问题):

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

    【讨论】:

      猜你喜欢
      • 2016-06-23
      • 1970-01-01
      • 2016-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多