ASP.Net MVC Reindirizzamento a una vista diversa


89

È possibile reindirizzare a una visualizzazione diversa da un controller?

Ad esempio, tutti i miei controller ereditano da un controller personalizzato che dispone di un costruttore che desidero reindirizzare a una vista diversa se non vengono soddisfatti determinati criteri. Spero che abbia un senso.

Risposte:


145

Puoi usare il RedirectToAction()metodo, quindi l'azione a cui reindirizzi può restituire una vista. Il modo più semplice per farlo è:

return RedirectToAction("Index", model);

Quindi nel tuo metodo Index, restituisci la visualizzazione che desideri.


1
Se l'ho fatto in questo modo, come faccio a restituire una vista specifica da un'azione del controller.
Gavin

18
return View ("ViewName");
Craig Stuntz

11
@ Craig - la visualizzazione di ritorno non esegue un reindirizzamento e l'URL finisce per essere lo stesso di prima. Quindi, se ti trovi in ​​"/ edit / MyItem", restituendo View ("showitem") otterrai la vista "showitem" con l'URL "/ edit /". A seconda della situazione, questo può funzionare, ma non sempre.
jeffreypriebe

5
@ Jeffrey, si tratta di due passaggi separati: Reindirizza nella prima azione, come ha detto John, quindi torna a Visualizza nella seconda. La prima azione non può (direttamente, comunque) dire alla seconda quale vista usare.
Craig Stuntz

@ Craig che aiuta un po '. C'è una "azione" e una "vista" - due cose separate. Perché allora la mia risposta di seguito funziona: RedirectToAction - nessun cambio di visualizzazione. Sono sicuro che questo è .net MVC 101 ma non capisco. Grazie.
jeffreypriebe

19
 if (true)
 {
   return View();
 }
 else
 {
   return View("another view name");
 }

2
Utilizza la stessa azione del controller. RedirectToAction chiama un'azione diversa. Questa è stata la soluzione più semplice per me.
RaoulRubin

6

Il modo più semplice è utilizzare Return View.

return View("ViewName");

Ricorda, il nome fisico di "ViewName" dovrebbe essere qualcosa come ViewName.cshtml nel tuo progetto, se stai usando MVC C # / .NET.


4

Non sono sicuro al 100% quali siano le condizioni per questo, ma per me quanto sopra non ha funzionato direttamente, pensavo si fosse avvicinato. Penso che fosse perché avevo bisogno di "id" per la mia vista nel modello che era chiamato "ObjectID".

Avevo un modello con una varietà di informazioni. Avevo solo bisogno dell'ID.

Prima di quanto sopra ho creato un nuovo oggetto System.Web.Routing.RouteValueDictionary e aggiunto l'id necessario.

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

(Nota: il progetto MVC in questione non l'ho creato, quindi non so dove siano tutti i pezzi "poco pratici" giusti.)


3

Ecco cosa puoi fare:

return View("another view name", anotherviewmodel);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.