2012-01-20 35 views
19

在我的網頁1的控制器中,我想重定向到網頁2,傳遞2個變量。RedirectToAction和RedirectToRoute

我試過使用RedirectToRoute,但無法讓它工作;顯示錯誤的URL。 然後我切換到使用RedirectToAction。

我的代碼:

路由

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(工作)

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

RedirectToRoute(不工作)

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

哦,還有一個其他事情,你能使參數需要,而不是可選的....如果是這樣,如何?

+1

如果不提供參數,您會發生什麼?是的,這是可能的,但所有將發生的404錯誤將會發生,或類似的東西。那是你要的嗎? –

回答

19

省略參數的默認值,使所需要的參數:

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

對於路由重定向,試試這個:

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

我從史蒂夫·桑德森拿起另一種習慣沒有命名您的路線。每條路徑可以有一個空名稱,這使您明確指定所有參數:

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

謝謝olivehour - 那很好。 只是想知道爲什麼我的RedirectToRoute版本無法正常工作,因爲我遵循重載方法的簽名....任何想法? 謝謝 – user1079925

+0

@ user1079925,就像我說的,我養成了不命名我的路線的習慣,所以我從不使用帶有路線名稱的重載。希望別人會回答誰能告訴你哪裏出了問題。這可能是不給你的路線命名的原因之一,這種習慣爲我付出了代價。 – danludwig

+0

好的....我要帶領你們,遠離路線命名 - 看起來像是一個障礙而不是幫助。 – user1079925