我在将MVM3中的ViewModel绑定到json时遇到问题。我的代码非常简单......
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<% using (Html.BeginForm("Save", "Home")) {%>
<p>
Cat
</p>
<button id="clickMe" type="submit">Click Me</button>
<% } %>
<script type="text/javascript">
$(function () {
$('form').submit(function () {
var cat = {
Age: 5,
Weight: 13.5,
Name: 'Fluffy'
};
$.ajax({
url: '/home/save',
type: 'post',
data: JSON.stringify(cat),
dataType: 'json',
contentType: 'application/json; charset=utf-8'
});
console.info(JSON.stringify(cat));
});
});
</script>
</asp:Content>
在Firebug信息窗口中打印console.info行,以便脚本在正确的时间启动。预期的JSON也出现在Firebug中......
Source
{"Age":5,"Weight":13.5,"Name":"Fluffy"}
但是,当下面的viewmodel进入下面的action方法时,它的所有属性都会被取消...
public class Cat
{
public int Age { get; set; }
public double Weight { get; set; }
public string Name { get; set; }
}
[HttpPost]
public ActionResult Save(Cat form)
{
return View();
}
我已经确认应用程序启动时JsonValueProviderFactory已在工厂中注册。我敢肯定我在这里遗漏了一些令人难以置信的简单的事情,任何人都可以对此有所了解吗?
提前致谢。
答案 0 :(得分:2)
这应该有效。只是不要忘记通过返回false来取消默认表单提交:
$('form').submit(function () {
var cat = {
Age: 5,
Weight: 13.5,
Name: 'Fluffy'
};
$.ajax({
url: this.href,
type: this.method,
data: JSON.stringify(cat),
dataType: 'json',
contentType: 'application/json; charset=utf-8'
});
return false;
});
此外,您已指定dataType: 'json'
,因此请确保您的控制器操作返回JSON:
[HttpPost]
public ActionResult Save(Cat form)
{
return Json(new { message = "success" });
}