通过jQuery ajax将数据发送到MVC Action,参数为null

时间:2017-07-05 15:20:28

标签: jquery ajax asp.net-core-mvc

我在这里遇到了几个与此相关的问题,到目前为止,他们都没有解决我的具体问题。我使用ajax将与DataGrid中所选行相关的数据发送到服务器上的操作。 JavaScript代码如下所示:

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值在发送到服务器之前肯定填充了我想要的数据,并且操作被命中,但是数据&#39;参数始终为null。我也尝试将[FromBody]属性放在参数上,但它没有改变它。无论我将数据命名为什么,或者我是否对其进行字符串化,参数都为空。

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

2 个答案:

答案 0 :(得分: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"
    });
}

答案 1 :(得分:0)

data的参数名称在stringify中,您仍需要指定发送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) }
    });
}