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?
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.
<%= Ajax.ActionLink("SomeActionMethod", new AjaxOptions {OnSuccess="somemethod"}) %>
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("<xml>This is poorly formatted xml.</xml>", "text/xml");
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);
}
);
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.