Datatables ASP.NET 5控制器方法可以';t接收JSON POST,ASP.NET 4控制器方法不接收
这件事让我毛骨悚然。我有两个项目,一个正在运行Datatables ASP.NET 5控制器方法可以';t接收JSON POST,ASP.NET 4控制器方法不接收,datatables,asp.net-core,asp.net-core-mvc,Datatables,Asp.net Core,Asp.net Core Mvc,这件事让我毛骨悚然。我有两个项目,一个正在运行ASP.NET 4,另一个ASP.NET 5 RC1 ASP.NET 5项目控制器收到的POST方法输入参数都是默认值,而不是从网页发送的值 为了缩小问题范围,我简化了两个项目中的controllersPOST方法 [HttpPost] public JsonResult DataHandler(int Draw) { //above Draw variable not set } 并在方法上放置一个断点以捕获变量Draw。该网页发送一个J
ASP.NET 4
,另一个ASP.NET 5 RC1
ASP.NET 5
项目控制器收到的POST
方法输入参数都是默认值,而不是从网页发送的值
为了缩小问题范围,我简化了两个项目中的controllersPOST
方法
[HttpPost]
public JsonResult DataHandler(int Draw)
{
//above Draw variable not set
}
并在方法上放置一个断点以捕获变量Draw
。该网页发送一个JSON post,参数Draw
的值为1。但是,在ASP.NET 5中,值为0(默认值),我发送的其他参数为null,而不是有值。在“ASP.NET 4”中,它是正确的
我使用的是jquerydatatables
和ASP.net4
项目中使用的代码相同
var oTable = $('#datatab').DataTable({
"serverSide": true,
"ajax": {
"type": "POST",
"url": '/Home/DataHandler',
"contentType": 'application/json; charset=utf-8',
'data': function (data) { return data = JSON.stringify(data); }
},
"dom": 'frtiS',
"scrollY": 500,
"scrollX": true,
"scrollCollapse": true,
"scroller": {
loadingIndicator: false
},
"processing": true,
"paging": true,
"deferRender": true,
"columns": [
{ "data": "Name" },
{ "data": "City" },
{ "data": "Postal" },
{ "data": "Email" },
{ "data": "Company" },
{ "data": "Account" },
{ "data": "CreditCard" }
],
"order": [0, "asc"]
});
我使用了Fiddler
并比较了两个项目发送给控制器的JSON
,以及发布到/Home/DataHandler
的JSON
内容,因为两者完全相同,即Draw=1
{“draw”:1,“columns”:[{“data”:“Name”,“Name”:“searchable”:true,“orderable”:true,“search”:{“value”:“regex”:false}},{“data”:“City”,“Name”:“searchable”:true,“orderable”:true,“search”:{“value”:“regex”:false},{“data”:“Postal”,“Name”:“searchable”:true,“orderable”:true,“search”:{“value”:“regex”:false},{“data”:“Email”,“Name”:,“searchable”:true,“orderable”:true,“search”:{“value”:“regex”:false}},{“data”:“Company”,“name”:“searchable”:true,“search”:{“value”:“value”:“regex”:false},{“data”:“Account”,“name”:“searchable”:true,“orderable”:true,“search”:{“value”:“regex”:false},{“data”:“CreditCard”,“name”:“searchable”:true,“orderable”:true,“searchable”:“search”:“search”:值“:”,“regex”:false}],“order”:[{“column”:0,“dir”:“asc”}],“start”:0,“length”:126,“search”:{“value”:“,“regex”:false}
我试过的东西
- 我在项目之间使用了相同的
contents和上面的codehtml表
文件.js
- 将我的控制器输入参数设置为小写,例如
draw
- 比较fiddler中的
JSON
数据是否相同POST
- 在
方法输入变量上放置一个断点,以便在值发布后立即捕获该值POST
数据类型:“json”
将return data=JSON.stringify(data)
替换为以下内容:
return data.Draw = JSON.stringify(data)
尝试从数据表设置的
ajax
部分删除contentType
和data
。尝试添加[FromBody]
属性,如感谢Daniel中所述。这就成功了