Reindirizza all'azione in un altro controller


124

Ho due controller, entrambi chiamati AccountController. Uno di loro, chiamiamolo Controller A, è in un Areachiamato Admine l'altro, chiamiamolo Controller B, non è in nessuno Area(immagino che significhi che è di default Area?). Controller Bha una action methodchiamata Login. Ho un action methodin Controller A, che ha questa linea

return RedirectToAction("LogIn", "Account");

Il problema è che ottengo un 404quando questa riga viene eseguita perché viene effettuato un tentativo di reindirizzamento a un file inesistente actionin Controller A. Voglio chiamare l' action methodin Controller B. È possibile?


Risposte:


236

È possibile fornire il areanel routeValuesparametro. Prova questo:

return RedirectToAction("LogIn", "Account", new { area = "Admin" });

O

return RedirectToAction("LogIn", "Account", new { area = "" });

a seconda dell'area a cui stai mirando.


cosa succede se voglio passare da una vista in una certa area all'azione di un controller che non si trova in nessuna area. Come in MVC5, il pulsante LogOff in alto a destra è in AccountController, che non risiede in nessuna area. E voglio disconnettermi da una vista in una determinata area ???
Awais Mahmood,

1
Il mio secondo esempio, area = ""lo farà per te.
Rory McCrossan

Questo ha funzionato per me con ASP.NET Core .... Quando ho aggiornato alla versione più recente, RedirectToAction si è rotto e l'ho fatto funzionare utilizzando l'area = "" con una stringa vuota.
Jonathan Alfaro

28

Usa questo:

return RedirectToAction("LogIn", "Account", new { area = "" });

Questo reindirizzerà LogInall'azione nel Accountcontroller nell'area "globale".

Sta usando questo RedirectToActionsovraccarico:

protected internal RedirectToRouteResult RedirectToAction(
    string actionName,
    string controllerName,
    Object routeValues
)

MSDN


9

Puoi usare questo:

return RedirectToAction("actionName", "controllerName", new { area = "Admin" });

2

Usa questo:

    return this.RedirectToAction<AccountController>(m => m.LogIn());

1
Mi piace il concetto. Ho sempre odiato la parte stringa di RedirectToAction e ho pensato che dovrebbe essere più simile a quello che hai inserito, ma questo sembra far arrabbiare c #. È in framework più recenti quindi 4.6.2?
user3071434

@ user3071434 No, puoi usare con l'aggiunta di "using Microsoft.Web.Mvc". puoi evitare la parte di stringa e ridurre a ricevere un errore in fase di esecuzione a causa del testo dell'azione sbagliato
Hiren Patel

0

Prova a cambiarli:

return RedirectToAction("Account", "Login");

L'ho provato e ha funzionato.

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.