程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET的路由系統:路由映射

ASP.NET的路由系統:路由映射

編輯:關於ASP.NET

總的來說,我們可以通過RouteTable的靜態屬性Routes得到一個基於應用的全局路由表,通過上面的介紹我們知道這是一個類型的RouteCollection的集合對象,我們可以通過調用它的MapPageRoute進行路由映射,即注冊URL模板與某個物理文件的匹配關系。路由注冊的核心就是在全局路由表中添加一個Route對象,該對象的絕大部分屬性都可以通過MapPageRoute方法的相關參數來指定。接下來我們通過實現演示的方式來說明路由注冊的一些細節問題。

我們已前面介紹的關於獲取天氣預報信息的路由地址,我們在創建的ASP.NET Web應用中創建一個Weather.aspx頁面,不過我們並不打算在該頁面中呈現任何天氣信息,而是將基於該頁面的路由信息打印出來。該頁面主體部分的HTML如下所示,我們不僅將基於當前頁面的RouteData對象的Route和RouteHandler屬性類型輸出來,還將存儲於Values和DataTokens字典的變量顯示出來。

   1: <body>
2: <form id="form1" runat="server">
3: <div>
4: <table>
5: <tr>
6: <td>Route:</td>
7: <td><%=RouteData.Route != null? RouteData.Route.GetType().FullName:"" %></td>
8: </tr>
9: <tr>
10: <td>RouteHandler:</td>
11: <td><%=RouteData.RouteHandler != null? RouteData.RouteHandler.GetType().FullName:"" %></td>
12: </tr>
13: <tr>
14: <td>Values:</td>
15: <td>
16: <ul>
17: <%foreach (var variable in RouteData.Values)
18: {%>
19: <li><%=variable.Key%>=<%=variable.Value%></li>
20: <% }%>
21: </ul>
22: </td>
23: </tr>
24: <tr>
25: <td>DataTokens:</td>
26: <td>
27: <ul>
28: <%foreach (var variable in RouteData.DataTokens)
29: {%>
30: <li><%=variable.Key%>=<%=variable.Value%></li>
31: <% }%>
32: </ul>
33: </td>
34: </tr>
35: </table>
36: </div>
37: </form>
38: </body>

在添加的Global.asax文件中,我們將路由注冊操作定義在Application_Start方法中。如下面的代碼片斷所示,映射到weather.aspx頁面的URL模板為{areacode}/{days}。在調用MapPageRoute方法的時候,我們還為定義在URL模板的兩個變量定義了默認值以及正則表達式。除此之外,我們還在注冊的路由對象上附加了兩個變量,表示對變量默認值的說明(defaultCity:BeiJing;defaultDays:2)。

   1: public class Global : System.Web.HttpApplication
2: {
3: protected void Application_Start(object sender, EventArgs e)
4: {
5: var defaults = new RouteValueDictionary { { "areacode", "010" }, { "days", 2 }};
6: var constaints = new RouteValueDictionary { { "areacode", @"0\d{2,3}" }, { "days", @"[1-3]{1}" } };
7: var dataTokens = new RouteValueDictionary { { "defaultCity", "BeiJing" }, { "defaultDays", 2 } };
8:
9: RouteTable.Routes.MapPageRoute("default", "{areacode}/{days}", "~/weather.aspx", false, defaults, constaints, dataTokens);
10: }
11: }

一、變量默認值

由於我們為定義在URL模板中表示區號和天數的變量定義了默認值(areacode:010;days:2),如果我們希望返回北京地區未來兩天的天氣,可以直接訪問應用根地址,也可以只指定具體區號,或者同時指定區號和天數。如下圖所示,當我們在浏覽器地址欄中輸入上述三種不同的URL會得到相同的輸出結果。

從下圖所示的路由信息我們可以看到,默認情況下RouteData的Route屬性類型正是Route,而RouteHandler屬性則一個是PageRouteHandler對象,我們會在本章後續部分對PageRouteHandler進行詳細介紹。通過地址解析出來的變量被存儲數Values屬性中,而在進行路由注冊過程為Route對象DataTokens屬性定義的變量被轉移到了RouteData的同名屬性中。[實例源代碼下載]

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved