在ASP.NET MVC中URLRouting也就是URL路由,這是一個神奇的功能,可以把Url變成符合使用者習慣或者更加對搜尋引擎友好的Url.簡單地帖一下代碼:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
這個是MVC預設的路由.現在,我想實現這樣一條URL: http://www.abc.com/apple/ 讓它對應的controller是Home ,action是google.很簡單的內容就不多說了,簡單地貼一下代碼:
routes.MapRoute(
"Topic", // Route name
"apple", // URL with parameters
new { controller = "Home", action = "google" }// Parameter defaults
);
現在有這樣一條Actionlink: @Html.ActionLink("Apple", null,"apple", null, new { @class="abc" }), 這條ActionLink是在一個_Layout.cshtml中,當我們第一次請求這條ActionLink的時候,會正確解析到Home controller,google Action, 地址顯示是http://www.abc.com/apple/ 當跳轉過後,第二次請求這條ActionLink的時候,解析的仍然是Home controller,google Action, 但是地址欄中的Url會變成http://www.abc.com/Home/google 如果把action中的null改成Null 字元就不會出現這種情況.不過真的有點蛋疼,為什麼只有在跳轉一次之後地址欄才會出錯?
謝謝1樓的提醒,在上面我把action和controller弄反了,汗,非常抱歉.已經修改過來了.
另外我說的側重點是想把Url變成http://www.abc.com/apple/ 另外這篇文章的意思是說,當您把Actionlink裡面的action設定為null的時候,(暫且把Url根目錄的的第一位稱為controller第二位稱為action)如果當前Url中的action是route預設的action的時候(比如Index) 返回的action就會為空白.如果不是,Url中action就會是route中當前的action.進而使您原有的url發生變化.而如果您把action那一項設定為空白字元的時候, 跳轉後的Url就始終是http://www.abc.com/apple/而不會蛋疼地變成http://www.abc.com/Home/google.