ModelBinders ASP.NET MVC 3 JSON no trabajan
-
26-09-2019 - |
Pregunta
estoy tratando de utilizar las nuevas ModelBinders JSON en MVC 3 que Scott Guthrie habla de en su blog.
Mi ejemplo es muy similar a la que él está utilizando. Tengo un modelo con 3 valores que estoy intentando escribir un mensaje en el servidor.
Las miradas modelo como este:
public class CommentViewModel
{
public string Product { get; set; }
public string Text { get; set; }
public string Author { get; set; }
}
El JavaScript parece a esto:
$("#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);
}
});
});
Las miradas acción del controlador como este:
[HttpPost]
public ActionResult Add(CommentViewModel comment)
{
// ...
}
La alerta que estoy recibiendo (el interior del poste JavaScript) me da algo le gusta esto:
value={"Product":"Classic","Text":"the comment","Author":"me"}
Estoy esperando las propiedades en el modelo a ser poblada en el servidor, pero todas las propiedades son nulos. Estoy usando ASP.NET MVC 3 Vista Previa 1.
Solución
Creo que podría deberse a que ASP.NET MVC 3 Vista Previa 1 no está registrando la JsonValueProviderFactory
automagicamente como se esperaba.
Ponga el siguiente fragmento en Global.asax para registrar manualmente, se debe fijar a resolver su problema:
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory())
Otros consejos
bastante seguro de que es necesario cambiar las siguientes líneas
$.ajax({
url: "/Home/Add",
type: "POST",
data: comment,
datatype: "json",
success: function (data) {
alert(data);
}
});
Aviso He quitado la stringify y la contenttype