C# MVC6中的Kendo UI网格DataSourceRequest和DataSourceRequestModelBinder

C# MVC6中的Kendo UI网格DataSourceRequest和DataSourceRequestModelBinder,c#,kendo-ui,kendo-grid,kendo-asp.net-mvc,C#,Kendo Ui,Kendo Grid,Kendo Asp.net Mvc,当运行DataSourceRequestModelBinder并尝试根据网格发送的参数创建DataSourceRequest时,似乎出现了一些问题。这是在mvc6和Kendo.mvcv2016.1.112中 在cshtml方面,剑道数据源如下所示: var myDS = new kendo.data.DataSource({ serverPaging: true, serverSorting: true, pageSize: 3, transport: {

当运行
DataSourceRequestModelBinder
并尝试根据网格发送的参数创建
DataSourceRequest
时,似乎出现了一些问题。这是在
mvc6
Kendo.mvcv2016.1.112

在cshtml方面,剑道数据源如下所示:

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);
}
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"
    }
});
控制器如下所示:

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);
}
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"
    }
});
[路线(“GetKendoGridData”)]
公共DataSourceResult GetKendoGridData([DataSourceRequest]DataSourceRequest请求)
{
//创建一些示例对象
var id=新列表{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=>newmymodel
{
Id=i
});
返回data.AsQueryable().ToDataSourceResult(请求);
}
初始读取工作正常,分页工作正常,但服务器端排序不行。我认为这是因为剑道网格发送排序参数的方式导致
DataSourceRequestModelBinder
无法解析它。我开始编写自己的ModelBinder,但后来决定再试一次

当尝试提供排序参数时,它很接近-ModelBinder填充排序对象,但“成员”字段始终为空:

如果页面中不包含
kendo.aspnetmvc.min.js
,可能会发生这种情况

支票是有用的


希望此帮助

通过在我的数据源中添加
类型:“webapi”
可以解决此问题。所以它最终会变成这样:

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);
}
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"
    }
});