ASP.NET MVC 3 JSON ModelBinders ne fonctionne pas
-
26-09-2019 - |
Question
Je suis en train d'utiliser les nouveaux ModelBinders JSON dans MVC 3 que Scott Guthrie parle de dans son blog .
Mon exemple est très semblable à celui qu'il utilise. J'ai un modèle avec 3 valeurs que je suis en train de POST au serveur.
Le modèle ressemble à ceci:
public class CommentViewModel
{
public string Product { get; set; }
public string Text { get; set; }
public string Author { get; set; }
}
Le code JavaScript ressemble à ceci:
$("#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);
}
});
});
L'action du contrôleur ressemble à ceci:
[HttpPost]
public ActionResult Add(CommentViewModel comment)
{
// ...
}
L'alerte que je reçois (l'un à l'intérieur du poste JavaScript) me donne quelque chose aime ceci:
value={"Product":"Classic","Text":"the comment","Author":"me"}
J'attends les propriétés du modèle à être renseigné sur le serveur, mais toutes les propriétés sont nulles. J'utilise ASP.NET MVC 3 Preview 1.
La solution
Je pense que ce pourrait être parce que ASP.NET MVC 3 Preview 1 n'enregistre pas le JsonValueProviderFactory
automagiquement comme prévu.
Mettez l'extrait suivant dans Global.asax pour enregistrer manuellement, il devrait résoudre résoudre votre problème:
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory())
Autres conseils
à peu près sûr que vous devez changer les lignes suivantes
$.ajax({
url: "/Home/Add",
type: "POST",
data: comment,
datatype: "json",
success: function (data) {
alert(data);
}
});
Avis que j'ai enlevé le stringify et le contenttype