不能使用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请求的'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"]) }];