ASP.NET MVC-controllerhandlinger, der returnerer JSON eller delvis html

Jeg forsøger at oprette controller handlinger, som vil returnere enten JSON eller delvis html afhængigt af en parameter. Hvad er den bedste måde at få resultatet returneret til en MVC-side asynkront?

Løsning

I din handlingsmetode skal du return Json(object) for at returnere JSON til din side.

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

Derefter skal du bare kalde handlingsmetoden ved hjælp af Ajax. Du kan bruge en af hjælpemetoderne fra ViewPage som f.eks.

SomeMethod ville være en javascript-metode, der derefter evaluerer det returnerede Json-objekt.

Hvis du ønsker at returnere en almindelig streng, kan du bare bruge ContentResult:

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

ContentResult returnerer som standard en text/plain som contentType.
Dette kan overbelastes, så du kan også gøre det:

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

En anden god måde at håndtere JSON-data på er ved hjælp af JQuery getJSON-funktionen. Du kan kalde den

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

Metode fra jquery getJSON-metoden ved blot at...

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

For at besvare den anden halvdel af spørgsmålet kan du ringe:

return PartialView("viewname");

når du ønsker at returnere delvis HTML. Du skal bare finde en måde at afgøre, om anmodningen ønsker JSON eller HTML, måske baseret på en URL-del/parameter.

Kommentarer (3)