Acciones del controlador ASP.NET MVC que devuelven JSON o html parcial

Estoy intentando crear acciones de controlador que devuelvan JSON o html parcial dependiendo de un parámetro. Cuál es la mejor manera de obtener el resultado devuelto a una página MVC de forma asíncrona?

Solución

En su método de acción, devuelva Json(object) para devolver JSON a su página.

public ActionResult SomeActionMethod() {
  return Json(new {foo="bar", baz="Blech"});
}

Luego sólo tienes que llamar al método de acción usando Ajax. Puedes usar uno de los métodos de ayuda de la ViewPage como

SomeMethod sería un método javascript que luego evalúa el objeto Json devuelto.

Si quieres devolver una cadena simple, puedes usar simplemente el ContentResult:

public ActionResult SomeActionMethod() {
    return Content("hello world!");
}

ContentResult por defecto devuelve un text/plain como contentType.
Esto es sobrecargable por lo que también se puede hacer:

return Content("This is poorly formatted xml.", "text/xml");
Comentarios (5)

Otra buena forma de tratar los datos JSON es utilizar la función JQuery getJSON. Puedes llamar a la función

public ActionResult SomeActionMethod(int id) 
{ 
    return Json(new {foo="bar", baz="Blech"});
}

Método desde el método jquery getJSON simplemente...

$.getJSON("../SomeActionMethod", { id: someId },
    function(data) {
        alert(data.foo);
        alert(data.baz);
    }
);
Comentarios (3)

Para responder a la otra mitad de la pregunta, puede llamar:

return PartialView("viewname");

cuando quieras devolver un HTML parcial. Sólo tienes que encontrar alguna manera de decidir si la solicitud quiere JSON o HTML, tal vez basado en una parte/parámetro de la URL.

Comentarios (3)