3

我正在尝试使用 Scott Guthrie 在他的博客中谈到的 MVC 3 中的新 JSON ModelBinders 。

我的示例与他使用的示例非常相似。我有一个具有 3 个值的模型,我试图将其发布到服务器。

该模型如下所示:

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 Preview 1。

4

2 回答 2

4

我认为这可能是因为 ASP.NET MVC 3 Preview 1 没有JsonValueProviderFactory按预期自动注册。

将以下代码段放入 Global.asax 以手动注册它,它应该可以解决您的问题:

ValueProviderFactories.Factories.Add(new JsonValueProviderFactory())
于 2010-09-01T06:20:10.983 回答
2

很确定您需要更改以下几行

$.ajax({                                                    
    url: "/Home/Add",
    type: "POST",
    data: comment,
    datatype: "json",
    success: function (data) {
        alert(data);
    }
});

注意我已经删除了 stringify 和 contenttype

于 2010-08-31T21:38:52.917 回答