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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top