MVC3自动绑定到JSON对象列表不适用于属性

时间:2012-01-30 20:08:26

标签: json asp.net-mvc-3

我有一个JSON对象数组,我发布到MVC3控制器。根据我运行的小提琴检查,JSON似乎很好。 (包含在下面)控制器正在接受我设置的自定义类以接收JSON数据。这看起来也很好(下面包含调试器截图)问题是对象属性似乎没有像我期望的那样自动绑定。这些名字都匹配,我不确定这个问题。

下面是jquery(首先单击以添加到数组,然后单击以发布数据)

var removes = [];
var adds = [];

var transaction = {
    'adds': adds,
    'removes': removes
};

jQuery(".AddCardLink").click(function () {
            var card = [{
                Id: jQuery(this).attr("cardid"),
                Name: jQuery(this).attr("cardname")
            }];
            transaction.adds.push(card);
        })

jQuery("#btnSave").click(function () {
            jQuery.ajax({
                type: "POST",
                url: "/SaveTransactionLog",
                data: JSON.stringify(transaction),
                dataType: "json",
                contentType: "application/json",
                success: function (data) {
                   alert("Test");
                }
            });
        });

这是发送数据的提琴视图

Fiddler

自定义类和控制器如下:

public class Card
{
  public int Id { get; set; }
  public string Name { get; set; }
}

public class JsonTransaction
{
     public List<Card> Adds { get; set; }
     public List<Card> Removes { get; set; }
}

[HttpPost]
public JsonResult SaveTransactionLog(JsonTransaction transaction)
{ 
   return  Json()
}

最后,这是调试器查看JsonTransaction,你可以看到autobind设置正确的列表,但列表属性中的Card是空的。

enter image description here

如果你坚持到最后,谢谢!任何帮助都会很棒!

1 个答案:

答案 0 :(得分:0)

哎呀!在整个周末度过这个并最终在昨天发布SO之后,我发现了我的问题!

我的Jquery当我通过onclick添加它们时,我的对象周围有一个额外的方括号。删除方括号解决了我的问题。

jQuery(".AddCardLink").click(function () {
            var card = **[**{
                Id: jQuery(this).attr("cardid"),
                Name: jQuery(this).attr("cardname")
            }**]**;
            transaction.adds.push(card);
        })