似乎无法弄清楚为什么这不起作用。我正在尝试使用javascript / jquery将数据发布到MVC控制器。涉及的两个模型类,“Order”和“Item”如下所示,控制器和客户端javascript也是如此。奇怪的是,menuID和mealID字段绑定正确; items数组具有正确数量的对象(在此示例中为2),但没有项目字段。相反,它们保持为空(或在双打的情况下为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>
答案 0 :(得分:0)
使用以下内容替换$ .post:
$.ajax({
url: '/Order/Create',
dataType: 'json',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(order)
});
我在一个干净的MVC3项目中对此进行了测试。但是,我必须修改您的OrderModel
以包含List<OrderItem>
而不是List<MenuItem>
P.S。某些较旧的浏览器可能没有JSON.stringify
的原生支持,因此您可能希望使用其他内容。
答案 1 :(得分:0)
我认为您的问题可能与应用程序的文化有关,我可以指出您的模型具有双重值,并使用以下值5.5
,2.25
尝试设置网络。配置文化,允许处理这种值
<configuration>
<system.web>
<globalization culture="" uiCulture=""/>
</system.web>