Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向WebApi发布数据时,DataTables.AspNet IDataTablesRequest为空_C#_Asp.net_Ajax_Asp.net Web Api_Datatables - Fatal编程技术网

C# 向WebApi发布数据时,DataTables.AspNet IDataTablesRequest为空

C# 向WebApi发布数据时,DataTables.AspNet IDataTablesRequest为空,c#,asp.net,ajax,asp.net-web-api,datatables,C#,Asp.net,Ajax,Asp.net Web Api,Datatables,我正在处理DataTables.AspNetnumget包来实现服务器端分页、搜索和过滤 我正试图将我的表名从ajaxdatatables发布到WebApi控制器,以获取作为数据源返回的特定C#DataTable。我将表名打包为IDictionary AdditionalParameters(“table”是一个键)。当使用WebApi控制器的Data方法处理请求时,IDataTablesRequest参数总是以null的形式出现,因此我无法获取我的表名!此外,当我显式分配表名并获取DataTa

我正在处理
DataTables.AspNet
numget包来实现服务器端分页、搜索和过滤

我正试图将我的表名从ajax
datatables
发布到WebApi控制器,以获取作为数据源返回的特定C#DataTable。我将表名打包为
IDictionary AdditionalParameters
“table”
是一个键)。当使用WebApi控制器的
Data
方法处理请求时,
IDataTablesRequest
参数总是以
null
的形式出现,因此我无法获取我的表名!此外,当我显式分配表名并获取
DataTable
时,
datatableresponse.Create()
返回
null

那么,如何强制
IDataTablesRequest
datatables.js
获取传递的数据呢

客户端

函数加载表(类型,可编辑){
var url=“/api/Request/”+类型;
$.ajax({
url:“/api/Request/Columns/”+类型,
键入:“获取”,
状态代码:{
200:功能(响应){
dtcolumns=响应;
var列=[];
if(可编辑){columns.push({data:null,className:'select checkbox',defaultContent:'});}
for(DTI列中的变量i){
柱推(
{
名称:dtcolumns[i]。名称,
标题:dtcolumns[i]。标题,
数据:dtcolumns[i]。名称,
可见:!(dtcolumns[i]。标题==“”),
可排序:是的,
可搜索:正确
});
}
var request_data=新对象();
var AdditionalParameters={};
AdditionalParameters[“table”]=type;//表名!
请求_data.AdditionalParameters=AdditionalParameters;
var table=$(“#just table”).DataTable({
是的,
B:是的,
自动填充:{
水平:假
},
服务器端:是的,
处理:对,
列:列,
阿贾克斯:{
url:“/api/Request/Data”,
类型:“POST”,
//contentType:“应用程序/json”,
//数据类型:“json”,
//数据:JSON.stringify(请求_数据),
data:request_data,//将表名传递给WEBAPI控制器
状态代码:{
500:功能(响应){
警报(response.responseJSON.Message)
}
}
},
rowId:'ID',
滚动条:{
加载指示器:true
},
目标:0,
dom:“BSfrtips”
});
}
}
})
}
服务器端

[HttpPost]
[路由(“api/请求/数据”)]
公共JsonResult数据(IDataTablesRequest请求/*始终为空!!!*/)
{
DataTable data=DBContext.GetInstance()[request.AdditionalParameters[“table”].ToString()];
var filteredData=data.AsEnumerable().Where(row=>row.ItemArray.Contains(request.Search.Value));
var dataPage=filteredData.Skip(request.Start).Take(request.Length).CopyToDataTable();
//总是空的!!!
var response=DataTables.AspNet.WebApi2.datatableresponse.Create(请求、数据.AsDataView().Count、filteredData.Count()、数据页);
返回新的DataTablesJsonResult(响应、请求);
}

如果您没有传递任何附加参数(通过注释掉这行
数据:请求\数据
),那么您的ajax查询是GET,而方法是用POST属性修饰的。
请求\数据
对象仍然为空吗?@zgood不幸的是:(不!这个请求是POST的(请看“/api/request/data”)
function loadTable(type, editable) {
var url = "/api/Request/" + type;
$.ajax({
    url: "/api/Request/Columns/" + type,
    type: "GET",
    statusCode: {
        200: function (response) {
            dtcolumns = response;
            var columns = [];
            if (editable) { columns.push({ data: null, className: 'select-checkbox', defaultContent: '' }); }
            for (var i in dtcolumns) {
                columns.push(
                    {
                        name: dtcolumns[i].Name,
                        title: dtcolumns[i].Caption,
                        data: dtcolumns[i].Name,
                        visible: !(dtcolumns[i].Caption === ""),
                        sortable: true,
                        searchable: true
                    });
            }
            var request_data = new Object();
            var AdditionalParameters = {};
            AdditionalParameters["table"] = type; // Table Name!
            request_data.AdditionalParameters = AdditionalParameters;
            var table = $('#just-table').DataTable({
                deferRender: true,
                bPaginate: true,
                autoFill: {
                    horizontal: false
                },
                serverSide: true,
                processing: true,
                columns: columns,
                ajax: {
                    url: "/api/Request/Data",
                    type: "POST",
                    //contentType: "application/json",
                    //dataType: "json",
                    //data: JSON.stringify(request_data),
                    data: request_data, //PASSING TABLE NAME TO WEBAPI CONTROLLER
                    statusCode: {
                        500: function (response) {
                                alert(response.responseJSON.Message)
                        }
                    }
                },
                rowId: 'ID',
                scroller: {
                    loadingIndicator: true
                },
                targets: 0,
                dom: 'BS<"toolbar">frtips'
            });
        }
    }
})
}
    [HttpPost]
    [Route("api/Request/Data")]
    public JsonResult<IDataTablesResponse> Data(IDataTablesRequest request /*ALWAYS NULL!!!*/)
    {
        DataTable data = DBContext.GetInstance()[request.AdditionalParameters["table"].ToString()];
        var filteredData = data.AsEnumerable().Where(row => row.ItemArray.Contains(request.Search.Value));
        var dataPage = filteredData.Skip(request.Start).Take(request.Length).CopyToDataTable();
        //ALWAYS NULL!!!
        var response = DataTables.AspNet.WebApi2.DataTablesResponse.Create(request, data.AsDataView().Count, filteredData.Count(), dataPage);
       return new DataTablesJsonResult(response, Request);
    }