c# - 将数据发布到 WebApi 时,DataTables.AspNet IDataTablesRequest 为空
问题描述
我正在处理DataTables.AspNet
nuget 包来实现服务器端分页、搜索和过滤。
我正在尝试将我的表名从 ajax 发布datatables
到 WebApi 控制器,以便将特定的 C# DataTable 作为数据源返回。我将表名打包为IDictionary<string, object> AdditionalParameters
("table"
是键)的键值对。当请求通过Data
WebApi 控制器的方法处理时,IDataTablesRequest
参数总是来,null
所以我无法得到我的表名!此外,当我明确分配表名并 getDataTable
时,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);
}
解决方案
您的 ajax 查询是 GET 但该方法装饰有 POST 属性
推荐阅读
- javascript - 如何在提交之前验证此表单?
- reactjs - 如何触发与再次渲染无关的组件?
- ruby-on-rails - Rail:为什么我会得到这个错误的参数,即 URI 对象或 URI 字符串错误
- html - 我正在使用我的网站中嵌入的字体。第一次需要更多时间加载字体
- python - 未找到“data:image/png;base64,”的连接适配器
- r - 为经纬度点数据设置 CRS
- ruby-on-rails - 我应该使用哪个版本的 rails 6.1.3.2 或 rails 6.1.4(这是最新的)?
- javascript - 如何在没有 jQuery 的情况下使用滚动功能延迟加载 iframe
- android-studio - 在android Studio中运行应用程序需要很长时间
- reactjs - 使用 Public 文件夹中的大量静态文件提高 React App 的性能