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:
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
public class Cliente
{
public string Nome { get; set; }
public string Cnpj { get; set; }
}
E minha action ficou assim:
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.