不能使用AJAX将数组绑定到列表

本文关键字:绑定 列表 数组 AJAX 不能 | 更新日期: 2023-09-27 18:08:55

我正在使用AJAX调用来尝试将数组中的数组绑定到c#中的列表。第二个集合总是null。


如果您不熟悉数据表,只需担心dataTableOptions的AJAX部分,因为它与jQuery相同。以下是目前为止的内容:

JavaScript

var dataRows = [{ RowCells: ["Test", "Test"] }];
var reportSectionContents = { DataRows: dataRows };
dataTableOptions = {
    processing: true,
    serverSide: true,
    ajax:  {
        url: "/Data/ProcessDataTable",
        type: "POST",
        data: reportSectionContents
    }
};

Action

[HttpPost]
public JsonResult ProcessDataTable(ReportSectionContents reportSectionContents)    

ReportSectionContents

public class ReportSectionContents
{
    public string Title { get; set; }
    public ICollection<string> ColumnHeaders { get; set; }
    public ICollection<ReportRow> DataRows { get; set; }
    public ReportRow TotalRow { get; set; }
    public ReportSectionGraphContents Graph { get; set; }
    public ICollection<ReportSectionContents> LoopContents { get; set; }
}

ReportRow

public class ReportRow
{
    public IList<string> RowCells { get; set; }
}

运行时,操作中的reportSecionContents对象被填充,DataRows属性在集合中有一个项目,这是预期的。该项目有一个ReportRow的实例,但在该对象中RowCells属性始终为null。

我期望用2个字符串项("Test", "Test")填充它。我错过了什么?

编辑

与arserbin3的答案,我能够得到一点进一步,但现在我收到一个错误与我的AJAX请求,这是"无效的JSON原语: JSON字符串后面的"。我已经测试了这只是使用标准的jQuery AJAX,它工作得很好,所以我很确定,这是一个数据表问题现在(www.datatables.net)。我传递的字符串似乎是不正确的,但数据表试图解析的信息似乎不喜欢JSON形式

不能使用AJAX将数组绑定到列表

您应该只对设置为AJAX请求的'data'属性值的父对象进行字符串化。此外,您应该将contentType设置为JSON,以便它将请求正确地设置为application/json

修改你的JavaScript代码:

var dataRows = [{ "RowCells": ["Test", "Test"] }];
var reportSectionContents = { DataRows: dataRows };
dataTableOptions = {
    processing: true,
    serverSide: true,
    ajax:  {
        url: "/Data/ProcessDataTable",
        type: "POST",
        contentType: 'application/json',
        data: JSON.stringify(reportSectionContents)
    }
};

您需要使用JSON.stringify()包围字符串数组。这将使它正确地将字符串数组转换为字符串数组。它以"Test, Test"的形式到达服务器,而不是一个正确的数组。

var dataRows = [{ RowCells: JSON.stringify(["Test", "Test"]) }];