Estoy tratando de crear acciones del controlador que se devuelven JSON o HTML parcial en función de un parámetro. ¿Cuál es la mejor manera de conseguir el resultado devuelto a una página de MVC de forma asíncrona?
Respuestas
¿Demasiados anuncios?En su método de acción, devolver Json(objeto) para devolver JSON a su página.
public ActionResult SomeActionMethod() {
return Json(new {foo="bar", baz="Blech"});
}
A continuación, basta con llamar al método de acción el uso de Ajax. Usted podría utilizar uno de los métodos auxiliares de la ViewPage como
<%= Ajax.ActionLink("SomeActionMethod", new AjaxOptions {OnSuccess="somemethod"}) %>
SomeMethod sería un método javascript que, a continuación, se evalúa el objeto Json devuelto.
Si usted desea devolver una cadena sin formato, sólo puede utilizar el ContentResult:
public ActionResult SomeActionMethod() {
return Content("hello world!");
}
ContentResult por defecto devuelve un text/plain como su contentType.
Este es overloadable así también se puede hacer:
return Content("<xml>This is poorly formatted xml.</xml>", "text/xml");
Creo que usted debe considerar los AcceptTypes de la solicitud. Lo estoy usando en mi proyecto actual para devolver el tipo de contenido correcto de la siguiente manera.
Su acción en el controlador puede comprobar como en el objeto de la petición
if (Request.AcceptTypes.Contains("text/html")) {
return View();
}
else if (Request.AcceptTypes.Contains("application/json"))
{
return Json( new { id=1, value="new" } );
}
else if (Request.AcceptTypes.Contains("application/xml") ||
Request.AcceptTypes.Contains("text/xml"))
{
//
}
A continuación, puede aplicar el aspx de la vista para atender el caso parcial respuesta xhtml.
Luego, en jQuery se puede recuperar lo que pasa el parámetro de tipo como json:
$.get(url, null, function(data, textStatus) {
console.log('got %o with status %s', data, textStatus);
}, "json"); // or xml, html, script, json, jsonp or text
Espero que esto ayude James
Otra buena manera de tratar con datos JSON está utilizando la función JQuery getJSON. Usted puede llamar al
public ActionResult SomeActionMethod(int id)
{
return Json(new {foo="bar", baz="Blech"});
}
Método del método getJSON jquery simplemente ...
$.getJSON("../SomeActionMethod", { id: someId },
function(data) {
alert(data.foo);
alert(data.baz);
}
);
Para la gente que se han actualizado a MVC 3 aquí es una clara forma Utilizando MVC3 y Json