默认模型绑定器不绑定我的模型类

时间:2010-12-28 13:34:09

标签: asp.net jquery asp.net-mvc asp.net-mvc-2 defaultmodelbinder

我正在尝试发布一个应该使用ASP.NET MVC 2中的默认模型Binder功能的帖子,但不幸的是我无法通过....

当我点击结帐按钮时,我使用jQuery代码以dinamically方式填充表单,然后将此表单提交给服务器。这是提交的表单

<form action="/x/Order/Checkout" id="cartForm" method="post">
    <input name="__RequestVerificationToken" type="hidden" value="UDjN9RdWheKyWK5Q71MvXAbbDNel6buJd5Pamp/jx39InuyYIQVptcEubIA2W8DMUzWwnZjSGkLspkmDPbsIxy8EVuLvfCSZJJnl/NrooreouptwM/PaBEz2v6ZjO3I26IKRGZPqLxGGfITYqlf8Ow==">
    <input id="CustomerID" name="CustomerID" type="hidden" value="1">
    <input id="FirmID" name="FirmID" type="hidden" value="2">
    <input type="hidden" name="CartItems[0].ServiceTypeID" value="1">
    <input type="hidden" name="CartItems[0].Quantity" value="1">
    <input type="hidden" name="CartItems[1].ServiceTypeID" value="2">
    <input type="hidden" name="CartItems[1].Quantity" value="1">
</form>

这是处理表单

的提交事件的jQuery代码
$("#cartForm").submit(function (event) {
    event.preventDefault();
    var form = $("#cartForm");
    var panel = form.parent();
    panel.parent().block();
    $.ajax({
        type: "post",
        dataType: "html",
        url: '<%: Url.Content("~/Order/Checkout") %>',
        async: false,
        data: form.serialize(),
        success: function (response, status, xml) {
            panel.parent().unblock();
        },
        error: function (response) {
            panel.parent().unblock();
        }
    });
});

这是应该被称为

的控制器动作
[HttpPost]
[ValidateAntiForgeryToken]
public virtual ActionResult Checkout( CartModel cart ) {
}

最后这是涉及的CartModel类

public class CartModel : BaseModel
{
    public int CustomerID { get; set; }
    public int FirmID { get; set; }

    public List<CartItemModel> CartItems { get; set; }

    public CartModel() {
        CartItems = new List<CartItemModel>();
    }
}

public class CartItemModel : BaseModel
{
    public int ServiceTypeID { get; set; }
    public int Quantity { get; set; }
}

但默认的Model Binder不会将Web表单数据绑定到CartModel类。使用Fiddler我已经能够看到发送到服务器的数据是正确的,您可以从以下快照中看到

alt text

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

关注@Artem K.评论,代码看起来不错。

请验证BaseModel类是否阻止绑定对象。还要验证您没有任何过滤器阻止执行请求(如授权等)