将数据发布到 WebApi 时,DataTables.AspNet IDataTablesRequest 为空
Posted
技术标签:
【中文标题】将数据发布到 WebApi 时,DataTables.AspNet IDataTablesRequest 为空【英文标题】:DataTables.AspNet IDataTablesRequest is null when posting data to WebApi 【发布时间】:2020-03-23 08:01:48 【问题描述】:我正在处理DataTables.AspNet
nuget 包来实现服务器端分页、搜索和过滤。
我正在尝试将我的表名从 ajax datatables
发布到 WebApi 控制器,以便将特定的 C# DataTable 作为数据源返回。我将表名打包为 IDictionary<string, object> AdditionalParameters
的键值对("table"
是键)。当请求由 WebApi 控制器的Data
方法处理时,IDataTablesRequest
参数总是以null
的形式出现,所以我无法获得我的表名!此外,当我显式分配表名并获取DataTable
时,DataTablesResponse.Create()
返回null
。
那么如何强制IDataTablesRequest
获取从datatables.js
传递的数据?
客户端
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);
【问题讨论】:
如果你不传递任何额外的参数(通过注释掉这一行data: request_data
)request
对象是否仍然为空?
@zgood 不幸的是:(
【参考方案1】:
您的 ajax 查询是 GET,但该方法用 POST 属性装饰
【讨论】:
不!这个请求是 POST(查看“/api/Request/Data”)以上是关于将数据发布到 WebApi 时,DataTables.AspNet IDataTablesRequest 为空的主要内容,如果未能解决你的问题,请参考以下文章
将数据发布到 WebApi 时,DataTables.AspNet IDataTablesRequest 为空
使用 DataTable 将数据加载到 DataGridView 的进度条
将 JSON 数据显示到 DataTable Flutter
选择 webApi 模板时如何将 ASP.Net 身份添加到 Asp.Net Core?