将`Kendo.Mvc.UI.DataSourceRequest`类型的对象从jquery传递给Mvc Action

Vin*_*ngh 4 c# jquery asp.net-mvc-4

目标: 我想将一个类型的对象传递Kendo.Mvc.UI.DataSourceRequest给Mvc动作,这样我就可以根据应用的排序和过滤从数据库中获取结果.

问题/障碍: 当对象到达动作时,该对象变为空.

我的控制器行动

    public ActionResult Getresults([DataSourceRequest]DataSourceRequest request, Int32 TotalRec)
    {
        try
        {
            //get data from DAL
            var result = new DataSourceResult()
            {
                Data = List, // Process data (paging and sorting applied)
                Total = TotalRec
            };
            return Json(result, JsonRequestBehavior.AllowGet);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的jquery函数

function getData() {
    var gridDatasource = $('#gridname').data('kendoGrid').dataSource.options;
    var datatoPost = "{'request': '" + JSON.stringify(new kendo.data.DataSource(gridDatasource)) + "', 'TotalRec': '" + 100 + "'}";
    //new kendo.data.DataSource
    $.ajax({
        type: "Post",
        url: '/Administrator/Getresults/',
        contentType: "application/json; charset=utf-8",
        data: datatoPost,
        dataType: "json",
        processdata: false,
        success: function (value) {
            alert(value.d);
        },
        error: function () { alert("Ajax Error"); }
    });
}
Run Code Online (Sandbox Code Playgroud)

我试过JSON.stringify,但仍然相同,也喜欢 var datatoPost = "{'request': '" + JSON.stringify(gridDatasource) + "', 'TotalRec': '" + 100 + "'}";

我需要在这里解析我的对象还是可以转换它的类型.

小智 9

对我来说,工作如下:

$("#excel").kendoButton({
  click: function (event) {

    var data = grid.dataSource._params();
    var prepared = grid.dataSource.transport.parameterMap(data);

    $.post("/Root/AnotherControllerMethod", prepared, 
       function (data, status, xhr) {
         console.log("Ok!");
       }
    );
  }
});
Run Code Online (Sandbox Code Playgroud)