2010-03-20 16 views

Antwort

12

ActionResult ist die allgemeine Basisklasse, die alle anderen Ergebnisse von wie , JsonResult und so weiter abgeleitet sind.

Auf diese Weise können Sie mehrere Arten von Ergebnissen wie JSON und XML von derselben Methode zurückgeben.

+2

macht es einen Unterschied, wie zum Beispiel die Seite wird schneller gerendert, oder wird weniger Speicherplatz mit ViewResult anstelle von ActionResult oder etwas ähnlichem verwendet? – Omu

+0

Nein, es spielt überhaupt keine Rolle. Die ASP.NET MVC-Konvention hat den Rückgabetyp "ActionResult" und Sie geben einen abgeleiteten Typ zurück. –

4

Sie sollten ViewResult verwenden, um Code lesbarer zu machen und Fehler leichter zu finden, aber es kann auch andere Vorteile geben.

Da ich POST-REDIRECT-GET-Muster verwenden, schrieb ich einige Tests, um zu überprüfen, ob jede [HttpPost] -Methode RedirectToRouteResult zurückgibt. Wenn ich einen anderen Ergebnistyp in der Methode [HttpPost] definiere, wird der Test automatisch nicht bestanden. Dies verhindert, dass ich View (Modell) in der Post-Methode zurückgebe.

0

Wenn Sie Komponententests durchführen möchten, ändern Sie es in der Steuerung von ActionResult zu ViewResult. Dann haben Sie die Intelligenz in Ihrem Test Controller und das Leben ist gut.

0

Ich habe gerade vor ein paar Tagen versehentlich die gleiche Frage bekommen und Google kam, um schnell zu helfen. Grundsätzlich gibt es hier kein Leistungsproblem, es ist Coding-Problem, wenn überhaupt.

Dies ist eine kurze, aber nützliche Blog-Post: http://www.techiesblog.com/post/2862100163/viewresult-vs-actionresult-asp-net-mvc

+0

Dieser Link ist nicht sehr hilfreich, da Sie ein Passwort eingeben müssen, bevor Sie die Seite sehen können, aber keine Möglichkeit bietet, sich für die Site zu registrieren. – DOK

+0

Es war nicht zu der Zeit, als ich hier antwortete. Es scheint, dass kein Login-Formular wie üblich, der Autor wahrscheinlich seinen Blog privat gemacht hat. –

6

Es ist aus dem gleichen Grund Sie nicht jede Methode jeder Klasse schreiben zurückzukehren „Objekt“. Sie sollten so genau wie möglich sein. Dies ist besonders nützlich, wenn Sie Komponententests schreiben möchten. Keine weiteren Rückgabetypen und/oder Ergebnisse.

+0

Wenn Sie zu spezifisch sind, verbinden Sie Ihre Methoden mit ihrer Implementierung. Zum Beispiel gibt 'IEnumerable ' anstelle von 'T []' die Rückgabe von Arrays, Sammlungen, Listen usw. wieder. Stellen Sie genügend Kontext bereit, um den Entwickler in Bewegung zu versetzen, während Sie immer noch das darunter liegende Design ändern können. Aber gibt es einen Grund, warum Sie einen Test schreiben würden, um zu überprüfen, ob der Rückgabetyp "ViewResult" ist, wenn die Methode so deklariert ist, dass sie "ViewResult" zurückgibt? Wenn es "ActionResult" wäre, hätte es einen Wert. –

Verwandte Themen