2011-01-06 54 views
2

我有一個路由相當奇怪的問題。在這種情況下,爲什麼不使用Html.ActionLink的默認路由工作?

說迴路由不必擔心配置了一年後,我使用的是默認的路由,而忽略資源路線:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

routes.MapRoute(
     "Default", 
     // Route name 
     "{controller}/{action}/{id}", 

     // URL with parameters 
     new 
     { 
      controller = "Home", 
      action = "Index", 
      id = UrlParameter.Optional 
     }); 

我有一個RulesControllerIndex和行動LoremIndex.aspx,Lorem.aspx在Views> Rules目錄中。

我瞄準規則/指數maseter頁面上的ActionLink的:

<li><div><%: Html.ActionLink("linkText", "Index", "Rules")%></div></li> 

鏈接被呈現爲http://localhost:12345/Rules/和我得到一個404

當我鍵入Index到URL中應用程序將其路由到該操作。

當我更改默認路由操作從"Index""Lorem",動作鏈接被呈現爲http://localhost:12345/Rules/Index添加Index,因爲它是在默認路由和應用路線Index操作正確不再。

我已經使用Phil Haack's Routing Debugger,但輸入url http://localhost:12345/Rules/也導致404也使用它。

我想我已經涵蓋了所有的菜鳥錯誤,相關的SO問題和基本的RTFM。

我假設「規則」不是路由中的任何種類的保留字。 除了更新路線並將它們打散之外,我還能看到什麼?

+1

你有沒有定義任何IgnoreRoutes?你偶然在你的網站目錄中有一個名爲「規則」的文件夾? – 2011-01-06 17:34:02

+1

我確實有默認的忽略路由(現在在問題中添加)和是在文件夾上;架構師尚未爲Business Objects創建另一個項目,因此在那裏有一個「規則」文件夾。我會重新組織和測試。如果是這樣,請添加此評論作爲答案。 – StuperUser 2011-01-06 17:43:14

回答

2

確保在您的網站所在的目錄中沒有名爲「規則」的文件夾。在其默認配置中,ASP.NET MVC路由將在路由定義之前遵循物理路徑。如果定義的路由與網站中物理文件夾的路徑相匹配,路由引擎將被完全繞過。

您可以通過更改RouteTable.Routes.RouteExistingFiles屬性false禁用路由的物理路徑,但如果你這樣做,你的應用程序路徑的物理資源(如圖像,腳本,樣式表等),你將需要適應這些具有匹配的IgnoreRoute()定義的路徑。 例如:RouteTable.Routes.IgnoreRoute("content/{*pathInfo}");

相關問題