2

我正在使用带有 MVC.NET 的 KendoUI 来创建网格。网格的数据源是对我的控制器的 AJAX 回调。

绑定列上的 TEMPLATE 属性应该允许我使用 RAZOR 模板格式化列。

这一直有效,直到我“打开”ajax。下面的代码说明了这个问题:

@using Kendo.Mvc.UI;
@model IEnumerable<Test>
@{
    ViewBag.Title = "Test - Index";
}

<h2>Index</h2>

@{
        //public class Test {
        //    public string A;
        //    public string B;
        //}

        var data = new List<Test>() { new Test() { A="a1", B="b1"}, new Test() { A="a2",B="b2"}};

        // This one fails to honor TEMPLATE
        Html.Kendo().Grid(data).Name("test").Columns(columns => {
                                                              columns.Bound("A").Template(@<div>@item.A TEMPLATE APPLIED</div>);
                                                              columns.Bound("B");
                                                          }).DataSource(ds=>ds.Ajax()).Render(); // THIS BREAKS IT!

        // This one honors template               
        Html.Kendo().Grid(data).Name("test").Columns(columns => {
                                                              columns.Bound("A").Template(@<div>@item.A TEMPLATE APPLIED</div>);
                                                              columns.Bound("B");
                                                          }).Render();


    }

此示例中显示了两个网格。第二个网格可以做剃刀模板。第一个无法显示模板化数据。第一个网格只显示原始数据。

注意:我已尽可能简化此代码以说明问题。通常,在调用 Ajax() 方法之后,我还会调用其他方法来设置回调。

4

1 回答 1

7

文档中所述,对于 Ajax 数据源,您应该使用ClientTemplate而不是Template. 请注意,语法略有不同:

Html.Kendo().Grid(data).Name("test").Columns(columns => {
    columns.Bound("A").ClientTemplate("<div>#=A# TEMPLATE APPLIED</div>");
    columns.Bound("B").ClientTemplate("<div>#=A# AND #=B# JUST FOR KICKS</div>");;
}).DataSource(ds=>ds.Ajax()).Render();
于 2013-01-05T11:55:07.650 回答