我想使用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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top