Estou tentando criar ações do controlador que retornarão ou JSON ou html parcial, dependendo de um parâmetro. Qual é a melhor maneira de obter o resultado retornado para uma página MVC de forma assíncrona?
Em seu método de ação, devolva Json(objeto) para devolver o JSON à sua página.
public ActionResult SomeActionMethod() {
return Json(new {foo="bar", baz="Blech"});
}
Então basta chamar o método de acção usando Ajax. Você poderia usar um dos métodos de ajuda do ViewPage, tais como
<%= Ajax.ActionLink("SomeActionMethod", new AjaxOptions {OnSuccess="somemethod"}) %>
AlgumMétodo seria um método javascript que depois avalia o objeto Json devolvido.
Se você quiser retornar uma seqüência simples, você pode simplesmente usar o ContentResultado:
public ActionResult SomeActionMethod() {
return Content("hello world!");
}
ContentResultado por padrão retorna um texto/plain como seu conteúdoType.
Isto é sobrecarregável para que você também possa fazer:
return Content("<xml>This is poorly formatted xml.</xml>", "text/xml");
Outra forma agradável de lidar com os dados JSON é usando a função JQuery getJSON. Você pode chamar a função
public ActionResult SomeActionMethod(int id)
{
return Json(new {foo="bar", baz="Blech"});
}
O método do jquery getJSON simplesmente...
$.getJSON("../SomeActionMethod", { id: someId },
function(data) {
alert(data.foo);
alert(data.baz);
}
);
Para responder à outra metade da pergunta, você pode ligar:
return PartialView("viewname");
quando você quer retornar HTML parcial. Você'só terá que encontrar alguma maneira de decidir se a requisição quer JSON ou HTML, talvez baseado em uma parte/parâmetro de URL.