ASP.NET MVC controller acties die JSON of gedeeltelijke html teruggeven

Ik probeer controller acties te maken die ofwel JSON of gedeeltelijke html teruggeven, afhankelijk van een parameter. Wat is de beste manier om het resultaat asynchroon terug te sturen naar een MVC pagina?

Oplossing

In je actie methode, return Json(object) om JSON terug te sturen naar je pagina.

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

Roep dan gewoon de actie methode aan met behulp van Ajax. Je zou een van de helper methodes van de ViewPage kunnen gebruiken, zoals

SomeMethod zou een javascript methode zijn die dan het geretourneerde Json object evalueert.

Als je een gewone string wil teruggeven, kan je gewoon het ContentResult gebruiken:

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

ContentResult retourneert standaard een text/plain als zijn contentType.
Dit is overloadable zodat je ook kunt doen:

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

Een andere leuke manier om met JSON gegevens om te gaan is met behulp van de JQuery getJSON functie. Je kunt de

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

Methode van de jquery getJSON methode door simpelweg...

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

Om de andere helft van de vraag te beantwoorden, kunt u bellen:

return PartialView("viewname");

wanneer je gedeeltelijke HTML wilt retourneren. Je zult alleen een manier moeten vinden om te beslissen of het verzoek JSON of HTML wil, misschien gebaseerd op een URL deel/parameter.

Commentaren (3)