从ajax向控制器发送2d数组

时间:2016-04-02 19:57:27

标签: asp.net-mvc

我发送名称,这是一个字符串,表数据是一个二维数组 我在控制器中得到的名字很好,但我似乎无法得到tableData。

这就是我创建表格数据的方式

资料表

var tableData = new Array();

$('table tbody tr').each(function () {

    var tableRow = new Array();

    tableRow.push({ 'id: $(this).data('id') });
    tableRow.push({ 'item': $(this).data('item') });


    tableData.push(tableRow);
});

的JavaScript

var data = { Name: name, TableData: tableData };
$.ajax({
    type: 'POST',
    url: url,
    data: data
});

控制器

    [HttpPost]
    public void Add(string Name, string[][] TableData)
    {
          // Stuff
    }

1 个答案:

答案 0 :(得分:5)

与ASP.NET MVC应用程序一样,您可以从定义将反映到视图逻辑的视图模型开始:

public class MyViewModel
{
    public string Name { get; set; }
    public Ilist<MyViewModelItem> TableData { get; set; }
}

public class MyViewModelItem
{
    public string Id { get; set; }
    public string Item { get; set; }
}

然后修复您在客户端上构建数据的方式:

var tableData = [];
$('table tbody tr').each(function () {
    tableData.push({
        id: $(this).data('id'),
        item: $(this).data('item')
    });
});

然后将此信息发送到控制器的方式(将其作为JSON有效负载发送,以确保只要您的视图模型遵循正确的格式,复杂对象将在服务器上正确绑定):

$.ajax({
    type: 'POST',
    url: url,
    data: JSON.stringify({ name: name, tableData: tableData }),
    contentType: 'application/json'
});

和最后一块拼图 - 控制器动作的签名:

[HttpPost]
public void Add(MyViewModel model)
{
    // Stuff
}