ASP.NET MVC 3 JSON ModelBinder не работает - PullRequest
3 голосов
/ 31 августа 2010

Я пытаюсь использовать новые JSON ModelBinders в MVC 3, о которых Скотт Гатри рассказывает в его блоге .

Мой пример очень похож на тот, который он использует. У меня есть модель с 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.

Ответы [ 2 ]

4 голосов
/ 01 сентября 2010

Я думаю, это может быть связано с тем, что ASP.NET MVC 3 Preview 1 не регистрирует JsonValueProviderFactory автоматически, как ожидается.

Поместите следующий фрагмент в Global.asax, чтобы зарегистрировать его вручную, это должно исправитьВаша проблема:

ValueProviderFactories.Factories.Add(new JsonValueProviderFactory())
2 голосов
/ 01 сентября 2010

уверен, что вам нужно изменить следующие строки

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

Обратите внимание, что я удалил stringify и тип содержимого

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...