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

use*_*300 0 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);
});
Run Code Online (Sandbox Code Playgroud)

JavaScript的

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

调节器

    [HttpPost]
    public void Add(string Name, string[][] TableData)
    {
          // Stuff
    }
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 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; }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

[HttpPost]
public void Add(MyViewModel model)
{
    // Stuff
}
Run Code Online (Sandbox Code Playgroud)