ASP.Net MVC 3 - JSON模型如何绑定到数组?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (112)

我在ASP.Net MVC 3上,并通过在支持的功能列表,我应该能够得到默认的json模型绑定工作的框。不过,我还没有成功地从json绑定数组/集合到action方法参数。尽管我确实得到了简单的json对象绑定,如果这里的专家能告诉我我做错了什么,我将不胜感激。

代码如下:

服务器端代码优先:

//操作方法

 public JsonResult SaveDiscount(IList<Discount> discounts)
    {
       foreach(var discount in discounts)
       {
       ....
       }
    }

//视图模型

public class Discount
{
    string Sku{get; set;}
    string DiscountValue{get; set;}
    string DiscountType{get; set;}

}

//客户端(jQuery/js):

    var discount = {};
    var jsondatacoll = [];
    $('#discountgrid tr').each(function () {

        sku = $(this).find("td").eq(1).html();
        discValue = $(this).find('.discval').val();
        discType = $(this).find('.disctype').val();

        discount = { Sku: sku, DiscountType: discType, DiscountValue: discValue};
        jsondatacoll.push(discount);
        }
    })
    if (jsondatacoll.length > 0) {
        var catalogDiscount = JSON.stringify(jsondatacoll);

        $.ajax(
        {
            url: '/url/savediscount',
            type: 'POST',
            data: catalogDiscount,
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            success: function (data, textStatus, jqXHR) {
                ...                   
            },
            error: function (objAJAXRequest, strError) {                 
               ...
            }
        }
     );   //ajax
    }

我确实检查了json有效载荷,它看起来如下所示:

[
    {"Sku":"sku1","DiscountType":"type1","DiscountValue":"10"},     
    {"Sku":sku2","DiscountType":"type1","DiscountValue":"12"}, 
    {"Sku":"sku3","DiscountType":"type2","DiscountValue":"40"}
]

而在服务器端,我确实看到IList<Discount>折扣已填充3个空Discount对象 - 意味着属性为空,但折扣参数的长度为3。

提问于
用户回答回答于

模型属性必须标记为公开。

所以修改Discount下面的类解决了这个问题。

public class Discount
{
    public string Sku{get; set;}
    public string DiscountValue{get; set;}
    public string DiscountType{get; set;}

}
用户回答回答于

代替public{ get; set; }在我的模型引起的模型绑定到不行,它实际上是我的jQuery的方法!(RAWR!)

我正在使用$.post(不工作)而不是$.ajax

不起作用:

 $.post("/Games/Action",    { "userId": "1", "listName": [ { "fooId": "2", "barId": "99" } ] },    'json',    true   ); 

这些值位于Form.Data []中,但未正确映射。

起作用:

  $.ajax(     {         url: '/Games/Action',         type: 'POST',         data: JSON.stringify({ userId: "1", listName: [ { fooId: 2, barId: 99 } ] }),         dataType: 'json',         contentType: 'application/json; charset=utf-8',         success: function (data, textStatus, jqXHR)         {             console.log(data);         },         error: function (objAJAXRequest, strError)         {             console.log(data);         }     }); 

所有值映射正确。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励