ASP.NET MVC 3 JSON ModelBinders не работает
-
26-09-2019 - |
Вопрос
Я пытаюсь использовать новые JSON ModelBinders в MVC 3, которые разговаривают о Scott Guthrie его блог.
Мой пример очень похож на тот, который он использует. У меня есть модель с 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"}
Я ожидаю, что свойства в модели будут заполнены на сервере, но все свойства NULL. Я использую ASP.NET MVC 3 Preview 1.
Решение
Я думаю, что это может быть потому, что ASP.NET MVC 3 Preview 1 не регистрирует JsonValueProviderFactory
автоматически, как и ожидалось.
Поместите следующий фрагмент в Global.Asax, чтобы вручную зарегистрировать его, он должен решить вашу проблему:
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory())
Другие советы
уверен, что вам нужно изменить следующие строки
$.ajax({
url: "/Home/Add",
type: "POST",
data: comment,
datatype: "json",
success: function (data) {
alert(data);
}
});
Обратите внимание, что удалил Stringify и ContentType