mvc3之URL篇


一、根據路由系統生成友好的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);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM