将json从js传递给控制器

时间:2017-10-02 12:49:31

标签: javascript asp.net json asp.net-mvc asp.net-core

数据未传递给控制器​​,始终为null

我在视图中的脚本:

function deleteRecords() {
    var selected = [];
    $('#myTable input:checked').each(function () {
        selected.push($(this).attr('id'));
    });

    $.ajax({
        url: '/Home/DeleteRecords',
        type: 'POST',
        dataType: 'json',
        contentType: 'application/json; charset=utf-8',
        data: { "json": JSON.stringify(selected) },
        error: function () {
            alert("Error!");
        }
    });
}

我的家庭控制器方法:

[HttpPost]
public IActionResult DeleteRecords(string AllId)
{
    return null;
}

3 个答案:

答案 0 :(得分:2)

发送如下的ajax请求数据,

$.ajax({
    url: '/Home/DeleteRecords',
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify(selected),
    error: function () {
        alert("Error!");
    }
});

并接收行动中的数据,如

[HttpPost]
public IActionResult DeleteRecords(string[] AllId)
{
    return null;
}

需要传递动作。希望对你有所帮助。

答案 1 :(得分:0)

在Post中为您的属性命名与您的方法相同,以便自动绑定选择它。 - 事实证明这对于单个对象并不重要。

您创建的数据对象无法通过.net进行解析,直接使用JSON.stringify作为数据有效负载。

注意:由于您传递了一个字符串数组,因此Home控制器中的更改。

function deleteRecords() {
var selected = [];
$('#myTable input:checked').each(function () {
    selected.push($(this).attr('id'));
});

$.ajax({
    url: '/Home/DeleteRecords',
    type: 'POST',
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify(selected),
    error: function () {
        alert("Error!");
    }
});

}

对于您的家庭控制器方法:

[HttpPost]
public IActionResult DeleteRecords(string[] AllId)
{
    return null;
}

答案 2 :(得分:0)

使用您的问题中的代码,请尝试以下获取json

System.Web.Context.Current.Request.Form["json"]

如果你想要更优雅的东西,你需要在参数签名

中加入FromBody属性
DeleteResults([FromBody] string json)