一、根據路由系統生成友好的URL
ActionLink(this HtmlHelper htmlHelper, string linkText, string actionName);
會根據當前的路由指定的Controller來為自己的URL指定controller值。特殊的如下:
//路由設置 routes.MapRoute("NewRoute", "App/Do{action}", new { controller = "Home" }); //ActionLink的代碼如下: @Html.ActionLink("測試","Test")
會對應生成:<a href="/App/DoTest">測試</a>
上面的例子還說明了一個問題就是如果是使用寫死的<a href="/Home">測試</a>當路由被重新設置了,就會失效了,所以還是不建議使用“寫死”的方法,最好使用生成的方法。
二、指定控制器
//路由配置
routes.MapRoute( "Default", // 路由名稱 "{controller}/{action}/{id}", // 帶有參數的 URL new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 參數默認值 );
//View代碼:
@Html.ActionLink("測試", "Test", "Home")
//對應的html:
<a href="/Home/Test">
三、傳入額外的值
路由同二,View代碼 :@Html.ActionLink("測試", "Test", new { id = "MyID" }) 對應的html:<a href="/Home/Test/MyID">
當路由如下時:
routes.MapRoute( "Default", // 路由名稱 "{controller}/{action}", // 帶有參數的 URL new { controller = "Home", action = "Index"} // 參數默認值 );
對應的html:<a href="/Home/Test?id=MyID">兩種生成的html不同,但是都可以使用模型綁定,得到id的值。
當view代碼和默認路由系統相匹配時,生成的url會省去controller和action。路由如上面的所示,View代碼:@Html.ActionLink("主頁", "Index", "Home"),生成的url為:<a href="/">主頁</a>
四、指定html屬性
除了指定連接之外,還可以指定<a>標簽的屬性,如id,class等。
view代碼:@Html.ActionLink("測試", "Test", "Home", new { id="testID",@class="nav"})(為避免和c#中的class關鍵字混淆,使用@class表示html標簽中的class)
生成的html:<a class="nav" id="testID" href="/Home/Test”>測試</a>
除了上述的Html.ActionLink方法以外,我們來看一下重載中參數最多的一個:
// // 摘要: // 返回包含指定操作的虛擬路徑的定位點元素(a 元素)。 // // 參數: // htmlHelper: // 此方法擴展的 HTML 幫助器實例。 // // linkText: // 定位點元素的內部文本。 // // actionName: // 操作的名稱。 // // controllerName: // 控制器的名稱。 // // protocol: // URL 協議,如“http”或“https”。 // // hostName: // URL 的主機名。 // // fragment: // URL 片段名稱(定位點名稱)。 // // routeValues: // 一個包含路由參數的對象。 // // htmlAttributes: // 一個對象,其中包含要為該元素設置的 HTML 特性。 // // 返回結果: // 一個定位點元素(a 元素)。 // // 異常: // System.ArgumentException: // linkText 參數為 null 或為空。 public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, string controllerName,
string protocol, string hostName, string fragment, RouteValueDictionary routeValues, IDictionary<string, object> htmlAttributes);
不解釋那么多,因為注釋寫的很清楚,在此只舉個例子,路由同上,view代碼如下:
@Html.ActionLink("測試", "Test", "Home","https", www.cnblogs.com, " myFragmentName", new { id = "RoutePara"}, new { id = "myAnchorID", @class = "myCSSClass"})
生成html代碼:<a class="myCSSClass" id="myAnchorID" href="https://www.cnblogs.com/Home/Test/RoutePara# myFragmentName">測試</a>
以上都是生成的<a>標簽,下面來看一下真正的url
如下面的view代碼:”生成的url為: @Url.Action("Index", "Home", new { id=1})“生成的html是:”生成的url為: /Home/Index/1“主要用來表示某個連接的href的值。
五、指定路由
我們經常會設置路由的名字,不僅僅是為了好記,在對指定路由 也是有好處的。目的是讓自己知道可以指定路由,具體用的時間在去查看其它的方法,下面只給一個方法的形式。
public static MvcHtmlString RouteLink(this HtmlHelper htmlHelper, string linkText, string routeName);