[英]MVC3 and JSON model binding
似乎无法弄清楚为什么它不起作用。 我正在尝试使用javascript / jquery将数据发布到MVC控制器。 下面显示了涉及的两个模型类“ Order”和“ Item”,以及控制器和客户端javascript。 奇怪的是menuID和mealID字段正确绑定; items数组具有正确数量的对象(在此示例中为2),但没有item字段。 取而代之的是,它们保持为空(在双精度情况下为0)。
我尝试将数据包装在JSON.stringify中,但随后根本不起作用。 还尝试过在javascript对象中添加明确的对象定义(如某些帖子所建议的那样),例如
var order = {
"order": {
"menuID": $('#menuID').val(),
"mealID": $('#mealID').val(),
"items": items
}
};
但这也不起作用。 我在字段中找不到任何拼写错误。 最后,我查看了Firebug中的items数组,它看起来与我期望的完全一样:
[Object { desc="ham and cheese", cost="5.5", qty="1"}, Object { desc="soup", cost="2.25", qty="2"}]
关于什么是问题的任何理论? 谢谢。
public class OrderModel
{
public string menuID { get; set; }
public string mealID { get; set; }
public List<MenuItem> items { get; set; }
}
public class OrderItem
{
public string desc { get; set; }
public double cost { get; set; }
public double qty { get; set; }
}
[HttpPost]
public ActionResult Create(Models.OrderModel order)
{
try
{
// TODO: Add insert logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
Javascript:
<script type="text/javascript">
function onPlaceOrder() {
var x = validate();
if (x.isValid)
submit(x.items);
}
function submit(items) {
var order = {
menuID: $('#menuID').val(),
mealID: $('#mealID').val(),
items: items
};
$.post("/Order/Create", order);
}
function validate() {
items = [];
var isValid = true;
var regex_qty = new RegExp(/^\d*(\.\d{1,2})?$/);
$('#orderItems tbody tr').each(function () {
var msg = "";
var x = $(this).find('span[name=desc]');
var desc = $(this).find('span[name=desc]').html().trim();
var cost = $(this).find('span[name=cost]').html().trim();
var qty = $(this).find('input[name=qty]').val().trim();
if (regex_qty.test(qty) == false) {
msg += "Invalid or missing quantity. ";
isValid = false;
}
$(this).find('span[name=msg]').html(msg);
items.push({ "desc": desc, "cost": cost, "qty": qty });
});
return {"isValid":isValid, "items":items};
}
</script>
将$ .post替换为以下内容:
$.ajax({
url: '/Order/Create',
dataType: 'json',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(order)
});
我在一个干净的MVC3项目中对此进行了测试。 但是,我必须修改您的OrderModel
以包括List<OrderItem>
而不是List<MenuItem>
PS一些较旧的浏览器可能没有对JSON.stringify
本机支持,因此您可能想使用其他东西。
我觉得你的问题,它可能与应用程序的文化相关,我可以指出你的模型具有双重价值,具有以下值5.5
, 2.25
尝试设置web.config中文化,让来处理这种价值观
<configuration>
<system.web>
<globalization culture="" uiCulture=""/>
</system.web>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.