我正在尝试发布一个应该使用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我已经能够看到发送到服务器的数据是正确的,您可以从以下快照中看到
有什么建议吗?
答案 0 :(得分:3)
关注@Artem K.评论,代码看起来不错。
请验证BaseModel类是否阻止绑定对象。还要验证您没有任何过滤器阻止执行请求(如授权等)