Há um tempo atrás eu postei uma versão desse artigo utilizando o Asp.Net MVC1.Agora, o MVC2 está no ar e com isso ficou mais fácil postar um objeto Json para uma action.
Para começar, baixe o ASP.NET MVC2 Futures e adicione uma referência no seu projeto para Microsoft.Web.Mvc.dll e no Global.asax.cs registre a chamada para o provedor do json, dessa forma:
1 2 3 4 5 6 | protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterRoutes(RouteTable.Routes); ValueProviderFactories.Factories.Add(new JsonValueProviderFactory()); } |
Do lado do Asp.Net é só isso. Faça sua Action normalmente esperando um objeto, no meu caso eu segui o exemplo anterior com o caso do cliente:
Fiz uma classe Cliente
1 2 3 4 5 | public class Cliente { public string Nome { get; set; } public string Cnpj { get; set; } } |
E minha action ficou assim:
1 2 3 4 | public JsonResult Criar(Cliente cliente) { return Json(cliente); } |
Obviamente, essa não é uma action muito criativa, simplesmente está recebendo um objeto da classe Cliente e retornando como Json, mas aqui poderia ser feito qualquer coisa, não é necessário retornar um objeto json.
Por fim, para enviar um objeto json pelo jquery precisamos de um plugin, já que o jquery não faz isso nativamente. Eu usei o jquery-json, que tem um método toJSON para converter um objeto javascript para json.
Veja como ficou meu script:
Mas uma vez, um script sem muito segredo, estou pegando os valores de caixas de texto e montando meu objeto, depois convertendo a variável cliente para um objeto json armazenado na variável encoded e passando essa variável na chamada ajax para a action.