2012-02-02 39 views
6

在對不同問題的SO響應中,用戶表示它允許您避免將硬編碼路由值轉換爲html鏈接標記,但這不是真正有效的,因爲您必須將控制器,操作,區域,等等作爲字符串,所以你仍然硬編碼路由值。使用MVC HTML助手(如ActionLink,BeginForm,TextBox等)而不是本機HTML標記有什麼好處?

這是怎麼回事:

@Html.ActionLink(linkText: "MyLink", actionName: "MyAction", controllerName: "MyController", new { id = @myId }, new { area = "SomeArea"}) 

比這更好:

<a href='/SomeArea/MyController/MyAction/myId'>MyLink</a> 

回答

3

如果(a)你使用嚴格的默認路由格式,你的觀察是唯一真正的(B)如果您的應用程序將始終安裝在網站的根目錄下。如果你沒有做前者(比如說創建一個捷徑或者幫助到主頁控制器和幫助操作,然後通過引入一個帶有更多操作的幫助控制器來改變它,那麼你需要更新所有的硬編碼的錨標籤更好的選擇是使用RouteLink助手的路由名稱和其他參數

關於後者,我通常使用單個服務器來執行大部分分段部署和應用程序不是坐在站點根目錄下,而是坐在子目錄中,生產部署是混合的,但許多應用程序都安裝在站點根目錄下,使用helper可以忽略開發過程中的差異,因爲helper正確地構建了相對於目前的網站在所有情況下,這是非常有用的,我甚至使用它的腳本,css文件,圖像等通過UrlHelper到ma確保爲那些指定的路徑在分段和生產之間不會中斷。

+0

所有的優點。由於我的應用程序總是駐留在自己的站點並使用根相對路徑,所以我甚至沒有考慮過其他用例。在仔細觀察RouteLink助手之後,它似乎更適合大多數情況。 – jpshook 2012-02-02 16:46:11

0

使用助手似乎沒什麼好處,只要做一處更改 - 添加一個蒂爾達,以便路由器自動將地址解析到正確的位置。

<a href='~/SomeArea/MyController/MyAction/myId'>MyLink</a> 
相關問題