Ich versuche, Controller-Aktionen zu erstellen, die entweder JSON oder teilweise html je nach einem Parameter zurückgegeben werden. Was ist der beste Weg, um das Ergebnis asynchron an eine MVC-Seite zurückzugeben?
Geben Sie in Ihrer Aktionsmethode Json(object) zurück, um JSON an Ihre Seite zurückzugeben.
public ActionResult SomeActionMethod() {
return Json(new {foo="bar", baz="Blech"});
}
Rufen Sie dann einfach die Aktionsmethode mit Ajax auf. Sie können eine der Hilfsmethoden der ViewPage verwenden, wie z.B.
<%= Ajax.ActionLink("SomeActionMethod", new AjaxOptions {OnSuccess="somemethod"}) %>
SomeMethod wäre eine Javascript-Methode, die dann das zurückgegebene Json-Objekt auswertet.
Wenn Sie eine einfache Zeichenkette zurückgeben möchten, können Sie einfach das ContentResult verwenden:
public ActionResult SomeActionMethod() {
return Content("hello world!");
}
ContentResult gibt standardmäßig einen text/plain als ContentType zurück.
Dies ist überladbar, so dass Sie auch tun können:
return Content("<xml>This is poorly formatted xml.</xml>", "text/xml");
Eine weitere gute Möglichkeit, mit JSON-Daten umzugehen, ist die Verwendung der JQuery-Funktion getJSON. Sie können die
public ActionResult SomeActionMethod(int id)
{
return Json(new {foo="bar", baz="Blech"});
}
Methode von der jquery getJSON-Methode aus aufrufen, indem Sie einfach...
$.getJSON("../SomeActionMethod", { id: someId },
function(data) {
alert(data.foo);
alert(data.baz);
}
);
Um die andere Hälfte der Frage zu beantworten, können Sie anrufen:
return PartialView("viewname");
aufrufen, wenn Sie teilweise HTML zurückgeben wollen. Sie müssen nur einen Weg finden, um zu entscheiden, ob die Anfrage JSON oder HTML will, vielleicht basierend auf einem URL-Teil/Parameter.