2011-09-21 52 views
0

可能重複:
ActionLink to show parameters in URL instead of querystring?如何在MVC3中使用相同數目的參數處理兩個動作?

我有以下途徑:

routes.MapRoute(
      "List", // Route name 
      "{Home}/{list}/{id}/{name}", // URL with parameters 
      new { 
       controller = "Home", 
       action = "List", 
       id = UrlParameter.Optional, 
       name = UrlParameter.Optional } // Parameter defaults 
    ); 

routes.MapRoute(
      "Details", // Route name 
      "{Home}/{details}/{id}/{name}", // URL with parameters 
      new { 
       controller = "Home", 
       action = "Details", 
       id = UrlParameter.Optional, 
       name = UrlParameter.Optional } // Parameter defaults 
    ); 

我試圖爲:

/家庭/列表/ 1/A
/home/details/2/B

在家庭/信息/ 2名= B

+0

我想你是混淆參數默認路由部分。這些是相同的路線,但具有不同的默認值。 [爲什麼不嘗試路由調試器?](http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx) – bzlm

+0

這是不是與你的其他問題重複? –

回答

5

假設你沒有得到你的代碼示例錯誤,不能將上述結果。

路由處理程序將選擇匹配的第1條路由。

然而,從它是什麼樣子,你真正想要的是這樣的:

routes.MapRoute(
      "List", // Route name 
      "home/list/{id}/{name}", // URL with parameters 
      new { 
       controller = "Home", 
       action = "List", 
       id = UrlParameter.Optional, 
       name = UrlParameter.Optional } // Parameter defaults 
    ); 

routes.MapRoute(
      "Details", // Route name 
      "home/details/{id}/{name}", // URL with parameters 
      new { 
       controller = "Home", 
       action = "Details", 
       id = UrlParameter.Optional, 
       name = UrlParameter.Optional } // Parameter defaults 
    ); 

事實上,這兩個是非常相似,它可以被蒸餾成1路

routes.MapRoute(
      "Details", // Route name 
      "{controller}/{action}/{id}/{name}", // URL with parameters 
      new { 
       controller = "Home", 
       action = "List", 
       id = UrlParameter.Optional, 
       name = UrlParameter.Optional } // Parameter defaults 
    ); 
0

避免產生具有兩個UrlParameter.Optional聲明的路由。

您可以通過添加默認路由上面一條路線,像這樣實現您的路由:

routes.MapRoute(
    "Id_Name", // Route name 
    "{controller}/{action}/{id}/{name}", // URL with parameters 
     new{ 
      controller = "Home", 
      action = "List" } // Parameter defaults 
); 

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
     new { 
      controller = "Home", 
      action = "List", 
      id = UrlParameter.Optional} // Parameter defaults 
); 

第一條路線將創建當兩個變量聲明爲你想要的網址。第二條路線適用於一個變量或無變量。

相關問題