2017-07-05 116 views
0

我已经经历了几个与此有关的问题,到目前为止,他们都没有解决我的问题。我将与DataGrid中选定行相关的数据发送到使用ajax的服务器上的操作。 JavaScript代码如下所示:发送数据到MVC Action通过jQuery ajax,参数为null

function addSelected() { 
     var grid = $("#optionsGrid").dxDataGrid("instance"); 
     var gridData = grid.getSelectedRowsData(); 

     $.ajax({ 
      type: "POST", 
      url: "/api/Options/AddRange", 
      contentType: "application/json; charset=utf-8", 
      data: JSON.stringify({ data: gridData }) 
     }); 
    } 

和服务器上的动作(现在):

[HttpPost("api/[controller]/[action]")] 
public async Task<IActionResult> AddRange(string data) 
{ 

    return Ok(); 
} 

我已经在浏览器中和值的GridData检查它肯定是有数据填充我想在被发送到服务器之前,并且该操作被命中,但'data'参数始终为空。我也尝试在参数上放置[FromBody]属性,但它没有改变它。无论我命名数据或者是否将其串化,参数都为空。

将数据类型更改为动态也没有帮助,它仍然为空。需要发送的数据在检查时也包含在请求主体中。

+0

您是否检查过数据是在请求中发送的?换句话说,'gridData'是否有价值? –

+0

我建议你使用提琴手或任何类似的工具,并看到在行动确切地是什么被发送到服务器 – xrodas

+0

[ASP.NET核心MVC:如何获得未绑定到一个字符串的原始JSON?]( https://stackoverflow.com/questions/31952002/asp-net-core-mvc-how-to-get-raw-json-bound-to-a-string-without-a-type) – Igor

回答

3

尝试这种方式

function addSelected() { 
    var grid = $("#optionsGrid").dxDataGrid("instance"); 
    var gridData = grid.getSelectedRowsData(); 

    $.ajax({ 
     type: "POST", 
     url: "/api/Options/AddRange?data=" + JSON.stringify(gridData), 
     contentType: "application/json; charset=utf-8" 
    }); 
} 
+0

这工作,不得不从参数中删除[FromBody]属性。 – Valuator

0

data参数名称是在字符串化,你还需要指定要发送data作为参数。像下面这样切换:

function addSelected() { 
    var grid = $("#optionsGrid").dxDataGrid("instance"); 
    var gridData = grid.getSelectedRowsData(); 

    $.ajax({ 
     type: "POST", 
     url: "/api/Options/AddRange", 
     contentType: "application/json; charset=utf-8", 
     data: { data: JSON.stringify(gridData) } 
    }); 
} 
+0

仍为空,我不知道为什么。它觉得这*应该是正确的做法。 – Valuator