Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Datatables ASP.NET 5控制器方法可以';t接收JSON POST,ASP.NET 4控制器方法不接收_Datatables_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

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
方法输入参数都是默认值,而不是从网页发送的值

为了缩小问题范围,我简化了两个项目中的controllers
POST
方法

[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}

我试过的东西

  • 我在项目之间使用了相同的
    html表
    contents和上面的code
    .js
    文件
  • 将我的控制器输入参数设置为小写,例如
    draw
  • 比较fiddler中的
    JSON
    POST
    数据是否相同
  • POST
    方法输入变量上放置一个断点,以便在值发布后立即捕获该值

向ajax调用添加
数据类型:“json”

return data=JSON.stringify(data)
替换为以下内容:

return data.Draw = JSON.stringify(data)

尝试从数据表设置的
ajax
部分删除
contentType
data
。尝试添加
[FromBody]
属性,如感谢Daniel中所述。这就成功了