2

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

当我单击结帐按钮时,我使用 jQuery 代码动态地填充表单,然后将此表单提交到服务器。这是提交的表单

<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; }
}

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

替代文字

有什么建议吗?

4

1 回答 1

3

在@Artem K. 评论之后,代码看起来不错。

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

于 2010-12-28T14:33:06.587 回答