Przekierowanie ASP.Net MVC do innego widoku

89

Czy można przekierować do innego widoku z kontrolera?

Na przykład wszystkie moje kontrolery dziedziczą z kontrolera niestandardowego, który ma konstruktora, którego chcę przekierować do innego widoku, jeśli określone kryteria nie są spełnione. Mam nadzieję, że to ma sens.

Gavin
źródło

Odpowiedzi:

147

Możesz użyć RedirectToAction()metody, wtedy akcja, do której przekierowujesz, może zwrócić View. Najłatwiej to zrobić:

return RedirectToAction("Index", model);

Następnie w metodzie Index zwróć żądany widok.

John Sheehan
źródło
1
Jeśli zrobiłem to w ten sposób, jak mogę zwrócić określony widok z akcji kontrolera.
Gavin
18
return View ("ViewName");
Craig Stuntz
11
@Craig - widok powrotu nie przekierowuje, a adres URL jest taki sam jak poprzednio. Tak więc, jeśli jesteś w „/ edit / MyItem”, zwrócenie widoku („showitem”) spowoduje wyświetlenie widoku „showitem” z adresem URL „/ edit /”. W zależności od sytuacji może to działać, ale nie zawsze.
jeffreypriebe
5
@jeffrey, czyli dwa oddzielne kroki: Przekieruj w pierwszej akcji, jak powiedział John, a następnie zwróć Widok w drugiej. Pierwsza akcja nie może (w każdym razie bezpośrednio) powiedzieć drugiej, którego widoku użyć.
Craig Stuntz
@Craig, to trochę pomaga. Jest „akcja” i „widok” - dwie oddzielne rzeczy. Dlaczego więc moja odpowiedź poniżej działa: RedirectToAction - bez zmiany widoku. Jestem pewien, że to .net MVC 101, ale nie rozumiem. Dzięki.
jeffreypriebe
20
 if (true)
 {
   return View();
 }
 else
 {
   return View("another view name");
 }
Mahender Reddy
źródło
2
Używa tej samej akcji kontrolera. RedirectToAction wywołuje inną akcję. To było dla mnie najłatwiejsze rozwiązanie.
RaoulRubin
6

Najprostszym sposobem jest użycie return View.

return View("ViewName");

Pamiętaj, że fizyczna nazwa „ViewName” powinna być podobna do ViewName.cshtml w Twoim projekcie, jeśli używasz MVC C # / .NET.

Maeda
źródło
4

Nie jestem w 100% pewien, jakie są do tego warunki, ale dla mnie powyższe nie zadziałało bezpośrednio, pomyślałem, że było blisko. Myślę, że to dlatego, że potrzebowałem „id” dla mojego widoku, ponieważ w modelu był on nazwany „ObjectID”.

Miałem model z różnymi informacjami. Potrzebowałem tylko identyfikatora.

Przed powyższym utworzyłem nowy obiekt System.Web.Routing.RouteValueDictionary i dodałem potrzebny identyfikator.

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

(Uwaga: projekt MVC, o którym mowa, nie został przeze mnie utworzony, więc nie wiem, gdzie są wszystkie właściwe „skrzypiące” bity).

jeffreypriebe
źródło
3

Oto, co możesz zrobić:

return View("another view name", anotherviewmodel);
Andrzej
źródło