ASP.Net MVC-Umleitung in eine andere Ansicht

88

Ist es möglich, von einem Controller zu einer anderen Ansicht umzuleiten?

Beispielsweise erben alle meine Controller von einem benutzerdefinierten Controller mit einem Konstruktor, den ich in eine andere Ansicht umleiten möchte, wenn bestimmte Kriterien nicht erfüllt sind. Hoffe das macht Sinn.

Gavin
quelle

Antworten:

144

Sie können die RedirectToAction()Methode verwenden, und die Aktion, zu der Sie umleiten, kann eine Ansicht zurückgeben. Der einfachste Weg, dies zu tun, ist:

return RedirectToAction("Index", model);

Geben Sie dann in Ihrer Indexmethode die gewünschte Ansicht zurück.

John Sheehan
quelle
1
Wenn ich es so gemacht habe, wie kann ich eine bestimmte Ansicht von einer Controller-Aktion zurückgeben?
Gavin
18
return View ("ViewName");
Craig Stuntz
11
@Craig - Die Rückgabeansicht führt keine Umleitung durch und die URL ist dieselbe wie zuvor. Wenn Sie sich also bei "/ edit / MyItem" befinden, erhalten Sie durch die Rückgabe von View ("showitem") die Ansicht "showitem" mit der URL "/ edit /". Abhängig von Ihrer Situation kann dies funktionieren, aber nicht immer.
Jeffreypriebe
5
@ Jeffrey, das sind zwei separate Schritte: In der ersten Aktion umleiten, wie John sagte, und in der zweiten Aktion zurückgeben. Die erste Aktion kann (jedenfalls nicht direkt) der zweiten Aktion mitteilen, welche Ansicht verwendet werden soll.
Craig Stuntz
@Craig das hilft ein bisschen. Es gibt eine "Aktion" und eine "Ansicht" - zwei getrennte Dinge. Warum funktioniert dann meine Antwort unten: RedirectToAction - keine Änderung der Ansicht. Ich bin sicher, dass dies .net MVC 101 ist, aber ich verstehe nicht. Vielen Dank.
Jeffreypriebe
19
 if (true)
 {
   return View();
 }
 else
 {
   return View("another view name");
 }
Mahender Reddy
quelle
2
Dies verwendet dieselbe Controller-Aktion. RedirectToAction ruft eine andere Aktion auf. Dies war die einfachste Lösung für mich.
RaoulRubin
6

Der einfachste Weg ist die Verwendung von return View.

return View("ViewName");

Denken Sie daran, dass der physische Name des "ViewName" in Ihrem Projekt etwa ViewName.cshtml sein sollte, wenn Sie MVC C # / .NET verwenden.

Maeda
quelle
4

Ich bin nicht 100% sicher, wie die Bedingungen dafür sind, aber für mich hat das oben genannte nicht direkt funktioniert, dachte, es kam näher. Ich denke, das lag daran, dass ich für meine Ansicht "id" brauchte, da es im Modell "ObjectID" hieß.

Ich hatte ein Modell mit einer Vielzahl von Informationen. Ich brauchte nur den Ausweis.

Vorher habe ich ein neues System.Web.Routing.RouteValueDictionary-Objekt erstellt und die erforderliche ID hinzugefügt.

(System.Web.Routing.)RouteValueDictionary RouteInfo = new RouteValueDictionary();
RouteInfo.Add("id", ObjectID);
return RedirectToAction("details", RouteInfo);

(Hinweis: Das fragliche MVC-Projekt habe ich nicht erstellt, daher weiß ich nicht, wo sich die richtigen "fummeligen" Bits befinden.)

Jeffreypriebe
quelle
3

Folgendes können Sie tun:

return View("another view name", anotherviewmodel);
Andrew
quelle