2011-09-27 132 views
1

ActionLink結果「http:// localhost:5089/Article/GetArticlesByCategory?category = ASP.NET & categoryId = 2」。我想顯示鏈接類型「http:// localhost:5089/Blog/ASP.NET」。什麼是錯誤的路線命名爲「文章」。MVC 3路由問題

路線:

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

routes.MapRoute(
       "Article", 
       "Blog/{category}", // 
       new { controller = "Article", action = "GetArticlesByCategory", category = UrlParameter.Optional, categoryId = UrlParameter.Optional } 

鏈接:

@Html.ActionLink(k.Name, "GetArticlesByCategory", "Article", 
new { category = k.Name, categoryId = k.CategoryId }, null) 

解決

GetArticlesByCategory參數整數的categoryId改爲>>串類別,並替換操作代碼,以新的參數(字符串類)

條路線替換爲:

 routes.MapRoute(
      "Category", 
      "Blog/{category}", 
      new { controller = "Article", action = "GetArticlesByCategory", category = UrlParameter.Optional } 
     ); 

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

ActionLink的替換:

@Html.ActionLink(k.Name, "GetArticlesByCategory", "Article", 
new { category = k.Name }, null) 

回答

2

有幾個問題。首先,也是最重要的一點,您的路線以錯誤的順序指定。應該最後定義默認路由。其次,永遠不要用兩個可選參數定義路線。這隻會導致太多問題。

嘗試爲您的路線如下:

routes.MapRoute(
    "CategoryAndId", 
    "Blog/{category}/{categoryId}", 
    new { controller = "Article", action = "GetArticlesByCategory" } 
); 

routes.MapRoute(
    "CategoryOnly", 
    "Blog/{category}", 
    new { controller = "Article", action = "GetArticlesByCategory", 
     category = UrlParameter.Optional } 
); 

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

你是不是在路線

routes.MapRoute(
       "Article", 
       "Blog/{action}/{category}/{categoryId}", // 
       new { controller = "Article", action = "GetArticlesByCategory", category = UrlParameter.Optional, categoryId = UrlParameter.Optional } 

我建議你使用菲爾哈克的線路調試,http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx指定動作。

@Html.ActionLink(k.Name, "GetArticlesByCategory", "Article", 
    new { category = k.Name }, new { @title = "Kategorisindeki Makaleler", @class = "selected" }) 

既然你不想類別ID在:用於調試你的MVC路線

+0

自認倒黴的路線,但你的建議很好TY改變。 – ALKAN

+0

控制器的名稱和您需要用於此路線的操作的名稱是什麼? – Brettski

+0

controller =「Article」and action =「GetArticlesByCategory」 – ALKAN

0

如果您希望鏈接顯示爲http://localhost:5089/Blog/ASP.NET,你需要改變ActionLink的這樣一個偉大的方式鏈接,沒有必要把它在該路由不是由ActionLink的,因爲它需要一個類別ID參數以及匹配

編輯

如果你想從閱讀類別ID該路線,它需要被添加到路線。否則它只會作爲參數追加(就像在你的原始示例中一樣)。

如果你改變你的路線:

"Blog/{categoryId}/{category}" 
or 
"Blog/{category}/{categoryId}" 

該鏈接現在看起來像Blog/2/ASP.NETBlog/ASP.NET/2但如果你想的categoryId從URL中讀取,那麼我不認爲你有太多的選擇

+0

GetArticlesByCategory的categoryId參數 – ALKAN