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包来实现服务器端分页、搜索和过滤
我正试图将我的表名从ajaxdatatables
发布到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);
}