2009-02-13 21 views
72

Ist es möglich, zu einer anderen Ansicht von einem Controller umleiten?ASP.Net MVC Redirect auf eine andere Ansicht

Zum Beispiel erben alle meine Controller von einem benutzerdefinierten Controller, der einen Konstruktor hat, den ich auf andere Ansicht umleiten möchte, wenn bestimmte Kriterien nicht erfüllt sind. Hoffnung, die Sinn macht.

Antwort

117

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

return RedirectToAction("Index", model); 

Dann geben Sie in Ihrer Index-Methode die gewünschte Ansicht zurück.

+1

Wenn ich es so gemacht habe, wie gebe ich eine bestimmte Ansicht von einer Controller-Aktion zurück. – Gavin

+14

Rückansicht ("ViewName"); –

+7

@Craig - die Rückkehransicht führt keine Umleitung durch und die URL ist die gleiche wie zuvor. Wenn Sie sich also in "/ 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 das funktionieren, aber nicht immer. – jeffreypriebe

3

Ich bin mir nicht 100% sicher, was die Bedingungen dafür sind, aber für mich funktionierte das oben nicht direkt, dachte, dass es nahe kam. Ich denke, es war, weil ich "ID" für meine Ansicht brauchte, indem es in dem Modell "ObjectID" genannt wurde.

Ich hatte ein Modell mit einer Vielzahl von Informationen. Ich brauchte nur die ID.

Vor dem oben genannten erstellt ich ein neues System.Web.Routing.RouteValueDictionary -Objekt und fügte die erforderliche ID hinzu.

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

(Hinweis: das MVC-Projekt in Frage, die ich nicht selbst erstellt haben, so dass ich weiß nicht, wo all die richtigen "fummelig" Bits sind.)

16
if (true) 
{ 
    return View(); 
} 
else 
{ 
    return View("another view name"); 
} 
+2

Dies verwendet die gleiche Controller-Aktion. RedirectToAction ruft eine andere Aktion auf. Das war die einfachste Lösung für mich. – RaoulRubin

0

Hier ist, was Sie tun können, :

return View("another view name", anotherviewmodel); 
0

Der einfachste Weg ist die Rückansicht.

return View("ViewName"); 

Denken Sie daran, der physische Name des "Viewname" sollte so etwas wie ViewName.cshtml in Ihrem Projekt sein, wenn Ihr MVC C#/.NET verwenden.