asp.net-mvc - Controller 未拾取传递的 JSON 集合

标签 asp.net-mvc json binding

我有以下 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/

相关文章:

asp.net-mvc - 在 Asp.net MVC 项目中是否可以稍后添加测试项目?

asp.net-mvc - 将 HTML 或脚本注入(inject) MVC 页面生命周期?

javascript - 检查某些属性是否有值

arrays - 如何将 json 数组转换为 flex 4 数组 (as3)?

java - Java中使用 json-simple 将List转换为JsonObject

jquery - 更好的练习? jQuery

c# - HostingEnvironment.QueueBackgroundWorkItem 和 HostingEnvironment.RegisterObject 之间的区别

javascript - 如何每 3 秒使用 $http.get 发出一个新请求并在函数外部获取数据

java - 如果在 TableView JavaFx 中选择了多行,则禁用某些上下文菜单项

c# - 如何从 PropertyChanged 事件中正确重置与 ComboBox 关联的值?