ASP.NET MVC-Controller-Aktionen, die JSON oder Teil-HTML zurückgeben

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?

Lösung

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.

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("This is poorly formatted xml.", "text/xml");
Kommentare (5)

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);
    }
);
Kommentare (3)

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.

Kommentare (3)