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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top