ASP.NET MVC 3 JSON ModelBinders不工作
-
26-09-2019 - |
题
我想使用MVC 3的新JSON ModelBinders斯科特格思里在的他的博客。
我的例子非常相似,他正在使用的一个。我有3个值,其我试图POST到服务器的模型。
在模型看起来像这样:
public class CommentViewModel
{
public string Product { get; set; }
public string Text { get; set; }
public string Author { get; set; }
}
中的JavaScript看起来像这样:
$("#addComment").click(function () {
var comment = {
Product: $("#productName").html(),
Text: $("#comment").val(),
Author: $("#author").val()
};
alert("value=" + JSON.stringify(comment));
$.ajax({
url: "/Home/Add",
type: "POST",
data: JSON.stringify(comment),
datatype: "json",
contentType: "application/json; charset=utf-8",
success: function (data) {
alert(data);
}
});
});
在控制器操作看起来像这样:
[HttpPost]
public ActionResult Add(CommentViewModel comment)
{
// ...
}
我得到(JavaScript的门柱内侧的一个)警报给我的东西喜欢这样的:
value={"Product":"Classic","Text":"the comment","Author":"me"}
我期待在模型的属性在服务器上进行填充,但所有属性都为空。我使用ASP.NET MVC 3预览1。
解决方案
我认为这可能是因为ASP.NET MVC 3预览1未按预期自动地登记JsonValueProviderFactory
。
将下面的代码段中的Global.asax手动注册它,它应该修复解决问题:
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory())
其他提示
敢肯定你需要更改以下行
$.ajax({
url: "/Home/Add",
type: "POST",
data: comment,
datatype: "json",
success: function (data) {
alert(data);
}
});
通知我已经去除了字符串化和将contentType
不隶属于 StackOverflow