【发布时间】:2016-05-01 08:16:00
【问题描述】:
我一直在扯头发。我有两个项目,一个运行ASP.NET 4,另一个运行ASP.NET 5 RC1
项目控制器ASP.NET 5接收到的POST方法输入参数均为默认值,并非网页传来的值。
为了缩小问题范围,我在两个项目中简化了控制器 POST 方法
[HttpPost]
public JsonResult DataHandler(int Draw)
{
//above Draw variable not set
}
并在方法上放置一个断点来捕获变量Draw。该网页为Draw 参数发送一个值为1 的JSON 帖子。但是在 ASP.NET 5 中,该值为 0(默认值),而我发送的其他参数为 null 而不是具有值。在“ASP.NET 4”中是正确的。
我正在使用 jquery datatables 和 this ASP.NET 4 项目中使用的相同代码
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,"orderable":true,"search":{"value":"","regex" :false}},{"data":"Account","name":"","searchable":true,"orderable":true,"search":{"value":"","regex":false }},{"data":"CreditCard","name":"","searchable":true,"orderable":true,"search":{"value":"","regex":false}} ],"order":[{"column":0,"dir":"asc"}],"start":0,"length":126,"search":{"value":"","regex ":假}}
我尝试过的事情。
- 我在项目之间使用了相同的
html table内容和上面的代码.js文件 - 将我的控制器输入参数设置为小写,例如
draw - 比较fiddler中的
JSONPOST数据是一样的 - 在
POST方法输入变量上放置一个断点,以便在它发布后立即捕获该值
【问题讨论】:
-
尝试从 DataTable 设置的
ajax部分中删除contentType和data。 -
尝试像this answer一样添加
[FromBody]属性 -
谢谢丹尼尔。成功了
标签: datatables asp.net-core asp.net-core-mvc