2011年1月25日

ASP.NET MVC - Area與Controller之Routing問題

今天在測試MVC的Area的時候,發現了一個問題,目錄的層級大概是這樣
Area - Test -Controllers - AAController.cs
-Views - AA - Index.cshtml
Controllers - 無東西
Views - 無東西
此時跑測試的時候。
http://xxx/Test/AA 這是正常沒問題的。
http://xxx/AA 顯示的卻是一個例外,找不到Index.cshtml這個View,可見如果根目錄下的Controller如果沒有任何Controller的話,http://xxx/AA也會直接到Area -> Test -> Controller這個目錄下讀取AAController。

對我來說,這是一個很奇怪的現象,而且未來很容易出錯,假設,今天我在根目錄也建立了一個AAController和的Views,未來刪除掉根目錄的AAController但又忘記刪除Views,此時就會讀到Test這個Area的AAController,並且順利執行。( 但實際上我是不要順利執行的 .... )

會產生這個原因是因為,如果在當下之NameSpace找不到Controller,會自動的去搜尋別的Controller,本來以為在Routing設定的時候,加上NameSpace就可以了,但實際上不然,整個要改寫成這樣,才會正常

routes.MapRoute(
  "Default" , // 路由名稱
  "{controller}/{action}/{id}" , // URL 及參數
  new  { action = "Index" , id = UrlParameter .Optional }, new  string [] { "MVC.Controllers"  }
).DataTokens["UseNamespaceFallback" ] = false ;

必須加上DataTokens["UseNamespaceFallback" ] = false ; 告訴路由,只要抓取這個NameSpace底下的Controller就好,不要再去找整個目錄的Controller。

沒有留言:

張貼留言