ModelBinders ASP.NET MVC 3 JSON non funziona
-
26-09-2019 - |
Domanda
Sto cercando di utilizzare le nuove ModelBinders JSON in MVC 3 che Scott Guthrie parla in il suo blog .
Il mio esempio è molto simile a quella che sta usando. Ho un modello con 3 valori che sto cercando di POST al server.
Il modello assomiglia a questo:
public class CommentViewModel
{
public string Product { get; set; }
public string Text { get; set; }
public string Author { get; set; }
}
Il codice JavaScript è simile al seguente:
$("#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'aspetto azione di controllo come questo:
[HttpPost]
public ActionResult Add(CommentViewModel comment)
{
// ...
}
L'avviso sto ottenendo (quello vicino al palo JavaScript) mi dà qualcosa piace questo:
value={"Product":"Classic","Text":"the comment","Author":"me"}
Mi aspetto le proprietà nel modello da compilare sul server, ma tutte le proprietà sono nulli. Sto usando ASP.NET MVC 3 Anteprima 1.
Soluzione
Penso che potrebbe essere perché ASP.NET MVC 3 Anteprima 1 non sta registrando l'JsonValueProviderFactory
automagically come previsto.
Inserire il seguente frammento di codice in Global.asax per registrare manualmente, dovrebbe risolvere risolvere il problema:
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory())
Altri suggerimenti
abbastanza sicuro che è necessario modificare le seguenti righe
$.ajax({
url: "/Home/Add",
type: "POST",
data: comment,
datatype: "json",
success: function (data) {
alert(data);
}
});
Avviso ho rimosso la stringa i ed il contenttype