使用Asp.Net4新特性路由建立WebForm應用

xray2005發表於2013-04-14

  ASP.NET 4 中的路由

  1. 簡介:

  ASP.NET 4 增加了對使用 Web 窗體進行路由的內建支援。 路由是 ASP.NET 3.5 SP1 引入的一項功能,通過此功能可將應用程式配置為使用對使用者和搜尋引擎有意義的 URL,這樣無需指定物理檔名。 使用這項功能,可以提高站點的使用者友好度,並增加站點內容被搜尋引擎發現的概率。

  因此,我們可以使用在WebForm中使用路由,可以建立出類似mvc的那樣簡潔的url.比如:以前在asp.net的中,我們的url一般是http://www.xxx.com/artcile.aspx?id=1 這樣的.現在如果使用asp.net的路由,那麼我們的url可能就是這樣: http://www.xxx.com/artcile/1 這樣了,不需要想以前一樣通過urlrewrite來實現了.下面介紹具體的步驟.

  2. 準備環境:

  下面的例子是在Window7(IIS7.5)+VS2010的環境實現的.當然也可以使用VS2008 SP1實現(但具體程式碼存在一些差異)

  3. 新增路由規則:

  首先使用asp.net建立一個空的web應用程式,然後新增全域性檔案Global.asax,引用名稱空間System.Web.Routing,(如果沒有的話,則向專案中新增對System.Web.Routing的引用)然後在Application_Start

  事件中註冊相應的路由.示例程式碼如下:

using System.Web.Routing;

protected void Application_Start(object sender, EventArgs e)

        {

            RegisteRoutes(RouteTable.Routes);

        }

        private void RegisteRoutes(RouteCollection routes)

        {

            routes.MapPageRoute("", "", "~/Default.aspx");

            routes.MapPageRoute("list", "Items/{action}", "~/Items/list.aspx", false, new RouteValueDictionary { { "action", "all" } });

            routes.MapPageRoute("show", "Show/{action}", "~/show.aspx", false, new RouteValueDictionary { { "action", "all" } });

            routes.MapPageRoute("edit", "Edit/{id}", "~/edit.aspx", false, new RouteValueDictionary { { "id", "1" } }, new RouteValueDictionary { { "id", @"\d+" } });

        }

  其中需要說明的是asp.net 4中使用routes.MapPageRoute方法來新增相應的路由規則.它和.net 3.5 sp1中的routes.add是一樣的.只不過更方便些.

  routes.MapPageRoute:提供用於定義 Web 窗體應用程式的路由的方法。 有如下過載:

  MapPageRoute(String, String, String)   

  MapPageRoute(String, String, String, Boolean) 

  MapPageRoute(String, String, String, Boolean, RouteValueDictionary)

  MapPageRoute(String, String, String, Boolean, RouteValueDictionary, RouteValueDictionary)

  MapPageRoute(String, String, String, Boolean, RouteValueDictionary, RouteValueDictionary, RouteValueDictionary) 

  具體每個方法的解析可以檢視msdn

  下面就是對應註冊的路由規則,來建立普通的ASP.NET頁面了,如Default.aspx,show.aspx.edit.aspx等等.然後,我們就可以在執行例子來看看效果先了.如下圖所示:

  4. 獲取URL中的引數

  Page.RouteData中包含我們需要的URL引數.因此,我們可以通過以下方法來獲取URL中的引數,如下:

  方法一:在後臺.CS檔案寫如下程式碼:

   if (Page.RouteData.Values.ContainsKey("id"))

       this.lb.Text = Page.RouteData.Values["id"].ToString();

  方法二:在頁面中直接使用RouteValue,如下:

  <asp:Label ID="lb1" runat="server" Text="<%$RouteValue:id%>"></asp:Label>

  5. 頁面url連線的建立

  在實際應用肯定是要頁面跳轉的,asp.net4提供了多種方法來建立符合路由規則的頁面url。具體如下:

  方法一:

  直接按照規則,來建立url,如下:

   <asp:HyperLink ID="link1" runat="server" Text="Show All" NavigateUrl="~/show/all">

   </asp:HyperLink>

  <br />

   <asp:HyperLink ID="HyperLink1" runat="server" Text="Edit 1" NavigateUrl="~/Edit/1">

   </asp:HyperLink>

  方法二:

  使用RouteUrl來建立url,如下:

 <asp:HyperLink ID="HyperLink2" runat="server" Text="RouteUrl Show All " NavigateUrl="<%$RouteUrl:routename=show%> ">

  </asp:HyperLink>

   <br />

   <asp:HyperLink ID="HyperLink3" runat="server" Text="RouteUrl Edit 2" NavigateUrl="<%$RouteUrl:id=2,routename=edit %>">

   </asp:HyperLink>

   <br />

  這裡,我們通過指定routename使得應用能夠正確的引用規則,以便避免規則的混淆等等。

  方法三:

  通過.cs後臺程式碼來現實,比如:頁面有個超連線,如下:

 <asp:HyperLink ID="HyperLink4" runat="server" Text="Code behind Edit 2">

 </asp:HyperLink>

  那麼,後臺.cs程式碼可以來給HyperLink的url賦值:

 RouteValueDictionary p = new RouteValueDictionary { { "id", "3" } };

 VirtualPathData vpd = RouteTable.Routes.GetVirtualPath(null, "edit", p);

 this.HyperLink4.NavigateUrl = vpd.VirtualPath;

  至此,我們示範瞭如何使用asp.net 4中的路由來建立相應的webform應用。

相關文章