ASP.NET 4中,有一個新的URL Routing的功能,可讓我們很方便的自由設定我們想要的URL格式,例如:
http://yourWebSite/search.aspx?key=WPF7
透過URL Routing,網址列可變成
http://yourWebSite/search/WPF7
http://yourWebSite/employee.aspx?country=UK&city=London
透過URL Routing,網址列可變成
http://yourWebSite/employee/UK/London
然後利用URL Routing的機制,系統會自動對應與攜帶參數到指定的實際程式中去執行,以下就介紹5種URL Routing的使用方式與範例。
首先我們建立一個Web Application,並且在Site.Master中設計幾個選單,每一個選單點下去,就透過Global.asax.cs,分別對應出各種URL Routing的使用方式。整個範例結果看起來如下:
首先我們建立一個Web Application,並且在Site.Master中設計幾個選單,每一個選單點下去,就透過Global.asax.cs,分別對應出各種URL Routing的使用方式。整個範例結果看起來如下:
在Site.Master中我們先撰寫每個menu、URL與參數值
1: <asp:Menu ID="NavigationMenu" runat="server" >
2: <Items>
3: <asp:MenuItem NavigateUrl="~/" Text="Home"/>
4: <asp:MenuItem NavigateUrl="~/About" Text="About"/>
5: <asp:MenuItem NavigateUrl="~/product/" Text="Product"/>
6: <asp:MenuItem NavigateUrl="~/search/hello" Text="Search"/>
7: <asp:MenuItem NavigateUrl="~/users/MarkLin" Text="User"/>
8: <asp:MenuItem NavigateUrl="~/employee/UK/London/HoraceLin"
9: Text="Employee"/>
10: </Items>
11: </asp:Menu>
在Global.asax.cs中,我們要引用using System.Web.Routing,並且在RegisterRoutes這個Method中,寫入下列程式,分別表示使用者瀏覽器端輸入的各種URL,我們這邊該如何對應到真實的程式中。
1:
2: void RegisterRoutes(RouteCollection routes)
3: {
4: RouteTable.Routes.MapPageRoute("HomeRoute", "Home",
5: "~/Default.aspx");
6: RouteTable.Routes.MapPageRoute("AboutRoute", "About",
7: "~/About.aspx");
8: RouteTable.Routes.MapPageRoute("ProductRoute", "product",
9: "~/product.aspx");
10: RouteTable.Routes.MapPageRoute("SearchRoute",
11: "search/{searchterm}", "~/search.aspx");
12: RouteTable.Routes.MapPageRoute("UserRoute",
13: "users/{username}", "~/users.aspx");
14: RouteTable.Routes.MapPageRoute("EmployeeRoute",
15: "employee/{country}/{city}/{name}",
16: "~/employee.aspx");
17: RouteTable.Routes.MapPageRoute("LoginRoute", "Login",
18: "~/Account/Login.aspx");
19: }
RouteTable.Routes.MapPageRoute()之內基本上帶有4個参數,為了說明,本範例只帶前3個参數:
RouteTable.Routes.MapPageRoute(
路徑名稱,
路徑URL格式,
對應實體的程式URL,
(option)是否應該驗證使用者是否已獲得授權可存取實體 URL)
RouteTable.Routes.MapPageRoute(
路徑名稱,
路徑URL格式,
對應實體的程式URL,
(option)是否應該驗證使用者是否已獲得授權可存取實體 URL)
1.URL Routing with no param.
我們按下範例中的「Home」、「About」、「Product」選單與右上角的「Login In」連結(因在最右邊,Cut圖沒有出現),URL分別為「http://website/Home」、「http://website/About」、「http://website/product」與「http://website/Login」,透過Global.asax.cs中URL Routing機制,分別對應實際程式「Default.aspx」、「About.aspx」、「About.aspx」、「product.aspx」與「/Account/Login.aspx」,如下圖所示點選單後的畫面(請注意網址列的URL):
2.URL Routing + parms. + Page.RouteData.Values[]
我們按下範例中的「Search」選單,如Site.Master程式所述,這裡假設帶一個参數值hello,所以URL:「http://website/search/hello」,透過Global.asax.ca中URL Routing Format:search/{searchterm},{searchterm}即為參數名稱,分別對應實際程式search.aspx,並在search.aspx.cs撰寫如下程式:
1: protected void Page_Load(object sender, EventArgs e)
2: {
3: Result.Text = Page.RouteData.Values["searchterm"].ToString();
4: }
我們使用Page.RouteData.Values["參數名稱"]來承接參數值,並顯示在網頁控制項label=Result上,如下圖(請注意網址列的URL):
3.URL Routing + parms. + RouteUrl:RouteName
我們按下範例中的「Search」選單後,在search.aspx網頁中也撰寫如下連結:
1: <asp:HyperLink ID="HyperLink1" runat="server"
2: NavigateUrl="<%$RouteUrl:RouteName=SearchRoute,
3: searchterm=scott%>">
4: Demo Routing : Search for Scott
5: </asp:HyperLink>
上述RouteName後面即利用在Global.asax.cs中之前已經寫好的路徑名稱SearchRoute,後面接searchterm這個参數與參數值scott:
1: RouteTable.Routes.MapPageRoute("SearchRoute",
2: "search/{searchterm}",
3: "~/search.aspx");
所以URL為「http://website/search/scott」,透過Global.asax.cs中URL Routing Format:search/{searchterm}對應實際程式search.aspx,並顯示在網頁控制項label=Result上,如下圖(請注意網址列的URL):
4.URL Routing + parms. + RouteValue
如同上小段,URL也是帶一個参數,只是這裡是用RouteValue的與法來承接參數值。我們按下範例中的「User」選單,如Site.Master程式所述,這裡假設帶一個参數值MarkLin,所以URL為「http://website/users/MarkLin」,透過Global.asax.cs中URL Routing Format:users/{username},{username}即為參數名稱,分別對應實際程式users.aspx如下程式:
1: <p><asp:Label ID="Result" runat="server" Text=
2: "<%$RouteValue:username%>" CssClass="msg"/>
3: </p>
我們使用 RouteValue:參數名稱 來承接參數值,並顯示在網頁控制項label=Result上,如下圖(請注意網址列的URL):
5.URL Routing + multi parms. + RouteValue
我們按下範例中的「Employee」選單,如Site.Master程式所述,這裡假設帶3個参數值UK、London與HoraceLin,所以URL:「http://website//employee/UK/London/HoraceLin」,透過Global.asax.cs中URL Routing Format:employee/{country}/{city}/{name},{country}{city}{name}即為參數名稱,分別對應實際程式employee.aspx,並在employee.aspx撰寫如下程式:
1: <h2>Employee Information</h2>
2: <p>
3: Country : <asp:Label runat="server" Text=
4: "<%$RouteValue:country%>"
5: CssClass="msg1"/><br />
6: City : <asp:Label runat="server" Text=
7: "<%$RouteValue:city%>"
8: CssClass="msg1"/><br />
9: Name : <asp:Label runat="server" Text=
10: "<%$RouteValue:name%>"
11: CssClass="msg1"/>
12: </p>
我們使用 RouteValue:參數名稱 來承接參數值,並顯示在網頁如下圖(請注意網址列的URL):
沒有留言:
張貼留言