249 votos

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

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?

322voto

Haacked Puntos 31070

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");

78voto

James Green Puntos 996

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

47voto

SaaS Developer Puntos 4577

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);
    }
);
 

11voto

Brad Wilson Puntos 22910

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

 return PartialView("viewname");
 

cuando usted quiere volver HTML parcial. Usted sólo tendrá que encontrar alguna manera de decidir si la petición quiere JSON o HTML, quizás basado en una parte / parámetro URL.

4voto

Sarath Puntos 890

Para la gente que se han actualizado a MVC 3 aquí es una clara forma Utilizando MVC3 y Json

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: