[使用AJAX构建JSON集合并将其绑定到控制器操作的参数

问题描述 投票:0回答:2

有很多这样的问题,但是我找不到我在特定情况下做错的事情。我正在尝试构建对象的JSON集合并将其绑定到控制器动作的参数。

目前,我仅尝试将Name属性绑定到列表。我能想到的唯一问题可能是我的JSON集合结构。

AJAX:

function GetFilteredDatatablesValues() {
    var data = {
        Columns: []
    };

    for (var i = 0; i < 5; i++) {
        var column = {
            Name: "name" + i
        };
        data.Columns.push(column);
    }

    data = JSON.stringify(data);

    $.ajax({
        url: '/Client/DatatablesSearchTest',
        type: 'POST',
        contentType: "application/json; charset=utf-8",
        dataType: 'json',
        data: data,
        error: function (response) {

        },
        success: function (data) {

        }
    });
}

控制器动作:

public JsonResult DatatablesSearchTest(List<DataTableColumn> Columns) //Columns contains 0 items
{
    List<DataTableColumn> test = Columns;

    return Json(new { success = true });
}

型号:

public class DataTableColumn
{
    public int Data { get; set; }
    public string Name { get; set; }
    public bool Orderable { get; set; }
    public bool Searchable { get; set; }
    public Search Search { get; set; }
    public DataTableColumn()
    {
        Search = new Search();
    }
}
c# ajax asp.net-mvc asp.net-core
2个回答
0
投票

您发送的数据看起来像这样:

{
    Columns: [
        { column 1 },
        { column 2 }
    ]
}

但是控制器期望的数据看起来像这样:

[
    { column 1 },
    { column 2 }
]

我建议您始终创建一个单一模型,以完全反映您想要发送到服务器的内容。因此,您的控制器操作将如下所示:

[HttpPost]
public JsonResult DatatablesSearchTest(SearchModel model)
{
    List<DataTableColumn> test = model.Columns;
    return Json(new { success = true });
}
public class SearchModel
{
    List<DataTableColumn> Columns { get; set; }
}

0
投票

我确认您的代码适用于.Net Framework,但不适用于.netcore

解决此问题的简单方法:

1:将属性List<DataTableColumn> Columns放入RootModel

public class RootModel
{
    public List<DataTableColumn> Columns { get; set; }
}

2:通过添加[FromBody]来更改动作的签名:

public JsonResult DatatablesSearchTest([FromBody]RootModel rootModel) //Columns contains 0 items
{
    //List<DataTableColumn> test = Columns;

    return Json(new { success = true });
}

我希望这可以帮助您解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.