專案上碰到HyperLink 自動被加上了Area Name ,一來一往越來越多Area Name ,導致 Routing 異常的錯誤。
公司使用的是MVC 架構,專案目錄如下圖:
標準 MVC 資料夾結構,其中Controller 我擺了一個AccountController ,
這個控制器是專門用來做系統權限控管的,簡單來說就是登入登出功能。
系統登入後會預設導入到 Start Areas 裡的 DashBoardController,
我在MasterLayout 利用HtmlHelper 建立了一個HyperLink 用來登出,
1
@Html.ActionLink("登出", "LogOut", "Account", "", new { @class = "icon-off" })
但是,我在登入後HtmlHelper 幫我製作出的連結長得很怪,
1
<a class="icon-off" href="/xxxxx/Start/Account/LogOut?Length=0">登出</a>
自動在前面多了Area Name ,但是MVC Routing 一樣可以幫我們Routing 到正確的控制器上做登出的動作,
但登出後就很奇怪了,Url 變成這樣!!
但是登入功能依然可以被Routing 到,我們我們登入後再來看看HtmlHelper 做出來的HyperLink 長成怎麼樣,
結果!!
1
<a class="icon-off" href="/xxxxx/Start/Start/Account/LogOut?Length=0">登出</a>
竟然又多了一個Area Name,網址列也是!!
登出後再登入就出現問題了,
多了一堆的Area Name !!
後來查明原因為,我們套MasterLayout ,若專案上是有切割Area ,並且登入後會導到該Area 底下的功能時,
HtmlHelper ActionLink 會預設幫我們加上Area Name,雖然一開始Rauting 的到,到往返幾次後,加了越來越多的Area Name,
最後Routing不到就會出現錯誤。
解決方法其實很簡單,我們稍微修改 ActionLink 的寫法,
1
@Html.ActionLink("登出", "LogOut", "Account", new { area = string.Empty }, new { @class = "icon-off" })
我們強制 area 等於空的,此時HypeLink 就不會自動加上AreaName,即可解決上述問題!
這是小弟的第一篇文章,內容若有誤,還請指教,謝謝!
-
Previous
[C#] 擴充方法(Extension Methods)! -
Next
[Asp .Net MVC] 使用ValidateAntiForgeryToken FilterAttribute 防範CSRF攻擊!