MVC6中的Kendo UI Grid DataSourceRequest和DataSourceRequestModelBinder

时间:2016-02-09 00:00:05

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

DataSourceRequestModelBinder运行并尝试在Grid发送的参数上创建DataSourceRequest时,似乎出现了问题。这是MVC 6 Kendo.Mvc v2016.1.112

在cshtml方面,Kendo DataSource看起来像这样:

var myDS = new kendo.data.DataSource({
    serverPaging: true,
    serverSorting: true,
    pageSize: 3,
    transport: {
        read: {
            url: "/api/kendotest/GetKendoGridData"
        }
    },
    schema: {
        data: "Data",
        total: "Total"
    }
});

控制器看起来像这样:

[Route("GetKendoGridData")]
public DataSourceResult GetKendoGridData([DataSourceRequest]DataSourceRequest request)
{
    //create some sample objects
    var ids = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
    var data = ids.Select(i => new MyModel
    {
        Id = i
    });

    return data.AsQueryable().ToDataSourceResult(request);
}

初始读取工作正常,分页工作正常,但服务器端排序不正常。我认为这是因为Kendo网格在排序参数中发送的方式导致DataSourceRequestModelBinder无法解析它。我开始编写自己的ModelBinder,但后来决定再次尝试解决这个问题。

在尝试提供排序参数时接近 - ModelBinder填充Sort对象,但“Member”字段始终为null: No sort for you

2 个答案:

答案 0 :(得分:0)

如果您的网页中未包含kendo.aspnetmvc.min.js,则可能会发生这种情况。

检查this是有用的。

希望这个帮助

答案 1 :(得分:0)

这似乎是通过向我的数据源添加type: "webapi",来解决的。所以它最终看起来像这样:

var myDS = new kendo.data.DataSource({
    serverPaging: true,
    serverSorting: true,
    pageSize: 3,
    type: "webapi",
    transport: {
        read: {
            url: "/api/kendotest/GetKendoGridData"
        }
    },
    schema: {
        data: "Data",
        total: "Total"
    }
});