ASP.NET MVC 3 JSON Modelbinders não funcionando
-
26-09-2019 - |
Pergunta
Estou tentando usar o novo JSON Modelbinders no MVC 3 sobre o qual Scott Guthrie fala em Seu blog.
Meu exemplo é muito semelhante ao que ele está usando. Eu tenho um modelo com 3 valores que estou tentando postar no servidor.
O modelo se parece com o seguinte:
public class CommentViewModel
{
public string Product { get; set; }
public string Text { get; set; }
public string Author { get; set; }
}
O JavaScript se parece com o seguinte:
$("#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);
}
});
});
A ação do controlador é assim:
[HttpPost]
public ActionResult Add(CommentViewModel comment)
{
// ...
}
O alerta que estou recebendo (aquele dentro do post JavaScript) me dá algo que gosta disso:
value={"Product":"Classic","Text":"the comment","Author":"me"}
Espero que as propriedades do modelo sejam preenchidas no servidor, mas todas as propriedades são nulas. Estou usando o ASP.NET MVC 3 Preview 1.
Solução
Eu acho que pode ser porque o ASP.NET MVC 3 Preview 1 não está registrando o JsonValueProviderFactory
automagicamente conforme o esperado.
Coloque o seguinte snippet em global.asax para registrá -lo manualmente, ele deve corrigir resolver seu problema:
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory())
Outras dicas
Tenho certeza de que você precisa alterar as seguintes linhas
$.ajax({
url: "/Home/Add",
type: "POST",
data: comment,
datatype: "json",
success: function (data) {
alert(data);
}
});
Observe que removi o stringify e o contentType