我有以下 javascript 片段:
$.ajax({
url: self.LoadCirculationListUrl,
cache: false,
async: false,
dataType: 'json',
contentType: 'application/json; charset=utf-8',
data: [ { "ColumnName":"France","Comparitor":"=","Value":"1"},{"ColumnName":"Germany","Comparitor":">","Value":"3"}]
});
这是从上述 ajax 调用访问的 Controller :
public ActionResult LoadCirculationData(IList<CirculationListFilter> filters)
{
}
这里是
CirculationListFilter
类(class)public sealed class CirculationListFilter
{
public string ColumnName { get; set; }
public string Comparitor { get; set; }
public string Value { get; set; }
}
现在,当我运行代码时, Controller 没有得到传递给它的 JSON 集合;
filters
始终为空。但是,如果我这样做:$.ajax({
url: self.LoadCirculationListUrl,
cache: false,
async: false,
dataType: 'json',
contentType: 'application/json; charset=utf-8',
data: { "ColumnName":"Germany","Comparitor":">","Value":"3"}
});
Controller 是这样的:
public ActionResult LoadCirculationData(CirculationListFilter filters)
{
}
数据顺利通过。为什么 Controller 不能绑定(bind) JSON 项的集合?
编辑:
我更改了 AJAX 调用以使用它:
data: { filters: [{ "ColumnName": "France", "Comparitor": "=", "Value": "1" }, { "ColumnName": "Germany", "Comparitor": ">", "Value": "3" }]},
和 ActionResult:
public ActionResult LoadCirculationData(List<CirculationListFilter> filters)
现在
filters
里面有 2 个项目,但是每个 CirculationListFilter
类在其属性中填充了 NULL 数据。所以我越来越近了,但实际值没有被绑定(bind)。
最佳答案
问题出在 .ajax() 调用中。
.ajax() 不会将数据转换为 JSON 字符串。
它适用于一项的原因是因为 .ajax() 能够将数据转换为 MVC 欣然接受的查询字符串。
解决方法是先将JSON转成字符串:
$.ajax({
url: self.LoadCirculationListUrl,
cache: false,
async: false,
dataType: 'json',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify([ { "ColumnName":"France","Comparitor":"=","Value":"1"},{"ColumnName":"Germany","Comparitor":">","Value":"3"}])
});
关于asp.net-mvc - Controller 未拾取传递的 JSON 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8848658/