2012-01-20 5 views
19

Nel mio controller della pagina Web 1, desidero reindirizzare a Webpage 2, passando 2 variabili.RedirectToAction e RedirectToRoute

Ho provato a utilizzare RedirectToRoute, ma non riesco a farlo funzionare; URL errato viene visualizzato. Poi sono passato a utilizzare RedirectToAction.

il mio codice:

Routing

routes.MapRoute(
    "CreateAdditionalPreviousNames", // Route name 
    "Users/{controller}/{action}/{userId}/{applicantId}", // URL with parameters 
    new { controller = "UsersAdditionalPreviousNames", action = "Index", userId = UrlParameter.Optional, applicantId = UrlParameter.Optional } // Parameter defaults 
); 

RedirectToAction (che funziona)

return RedirectToAction("Index", "UsersAdditionalPreviousNames", new { userId = user.Id, applicantId = applicant.Id }); 

RedirectToRoute (non funziona)

return RedirectToRoute("CreateAdditionalPreviousNames", new { userId = user.Id, applicantId = applicant.Id }); 

Oh, e un altro cosa, puoi rendere i parametri richiesti, piuttosto che facoltativo .... se sì, come?

+1

Cosa ti aspetti che accada se non forniscono i parametri? Sì, è possibile, ma succederà solo un errore 404 o qualcosa di simile. E 'questo quello che vuoi? –

risposta

19

parametri Omettere di default per rendere i parametri richiesti:

routes.MapRoute(
    "CreateAdditionalPreviousNames", // Route name 
    "Users/{controller}/{action}/{userId}/{applicantId}", // URL with parameters 
    new { controller = "UsersAdditionalPreviousNames", action = "Index" } 
); 

Per percorso di reindirizzamento, provate questo:

return RedirectToRoute(new 
{ 
    controller = "UsersAdditionalPreviousNames", 
    action = "Index", 
    userId = user.Id, 
    applicantId = applicant.Id 
}); 

Un'altra abitudine che ho preso da Steve Sanderson non è chiamare il vostro percorsi. Ogni route può avere un nome null, che ti consente di specificare tutti i parametri esplicitamente:

routes.MapRoute(
    null, // Route name 
    "Users/{controller}/{action}/{userId}/{applicantId}", // URL with parameters 
    new { controller = "UsersAdditionalPreviousNames", action = "Index" } 
); 
+0

Grazie olivahour - che ha funzionato alla grande. Mi chiedevo solo perché la mia versione di RedirectToRoute non funzioni perché sto seguendo la firma del metodo sovraccarico .... qualche idea? Grazie – user1079925

+0

@ user1079925, come ho detto, ho preso l'abitudine di non nominare i miei percorsi, quindi non uso mai il sovraccarico che prende il nome di una rotta. Speriamo che qualcun altro risponda chi può dirti cosa è andato storto lì. Questo potrebbe essere uno dei motivi per non nominare i tuoi percorsi, l'abitudine ha pagato per me. – danludwig

+0

Ok .... vado a prendere il comando e ad allontanarmi dalla denominazione della rotta - sembra un ostacolo piuttosto un aiuto. – user1079925