路由就是將URL路徑映射到具體的物理文件。若要將路由添加到網(wǎng)站中,請(qǐng)使用 RouteCollection.MapPageRoute 方法將它們添加到RouteTable類的靜態(tài)Routes屬性。
如果網(wǎng)站還沒(méi)有 Global.asax 文件,請(qǐng)通過(guò)執(zhí)行下列步驟添加一個(gè)這樣的文件:
右擊“解決方案資源管理器”中的 Web 項(xiàng)目,然后選擇“添加新項(xiàng)”。
選擇“全局應(yīng)用程序類”,再單擊“添加”。
打開(kāi) Global.asax 文件。
在Application指令的后面,添加用于System.Web.Routing命名空間的Import指令,如下面的示例所示:
<%@ Import Namespace="System.Web.Routing" %>
在 Session_End方法的后面添加以下代碼:
在下面的過(guò)程中,您將向此方法中添加用于創(chuàng)建路由的代碼。
在 Application_Start 方法中,調(diào)用RegisterRoutes添加路由規(guī)則,如下面的示例所示:
上面的過(guò)程添加了用于注冊(cè)路由的空方法?,F(xiàn)在,將使用此方法將路由添加到網(wǎng)站中。
在 RegisterRoutes 方法中,添加以下代碼:
此代碼添加了一個(gè)未命名的路由,該路由具有URL匹配模式,該模式包含文本值“SalesReportSummary”和名為year的占位符(URL參數(shù))。它將路由映射到名為 Sales.aspx 的文件。
在 RegisterRoutes 方法中,添加以下代碼:
此代碼添加名為SalesRoute的路由。如果對(duì)路由規(guī)則進(jìn)行了命名,那么在下面創(chuàng)建了相同的路由規(guī)則的時(shí)候,可以使用名稱區(qū)分它們。
在 RegisterRoutes 方法中,添加以下代碼:
此代碼添加名為 ExpensesRoute 的路由。此路由包括一個(gè)普通匹配參數(shù) extrainfo。此代碼將 locale 參數(shù)的默認(rèn)值設(shè)置為“US”,將 year 參數(shù)的默認(rèn)值設(shè)置為今年。約束指定 locale 參數(shù)必須由兩個(gè)字母字符組成year 參數(shù)必須由四個(gè)數(shù)字組成。
當(dāng)向網(wǎng)頁(yè)中添加超鏈接時(shí),如果希望指定路由 URL 而不是物理文件,則您有兩個(gè)選擇:
可以對(duì)路由URL進(jìn)行硬編碼。
可以指定路由參數(shù)名稱和值,并讓 ASP.NET 生成對(duì)應(yīng)的 URL。如有必要,還可以指定路由名稱,以便唯一標(biāo)識(shí)路由。如果稍后更改路由URL規(guī)則,則必須更新所有硬編碼的URL,但是如果讓 ASP.NET生成URL,則始終自動(dòng)生成正確的URL(除非模式中的參數(shù)已更改)。
在下面的過(guò)程中,將使用硬編碼 URL 的超鏈接添加到網(wǎng)頁(yè)。
在“Solution”中,右擊 Web 項(xiàng)目,然后單擊"Add Item”。
顯示"Add Item”對(duì)話框。
選擇“Web 窗體”模板,確保選中“Place code in separate file”,將名稱設(shè)置為“Links.aspx”,然后單擊“添加”。
即會(huì)在“源”視圖中打開(kāi)Links.aspx頁(yè)。
在開(kāi)始和結(jié)束 <div> 標(biāo)記之間添加以下標(biāo)記:
此標(biāo)記中使用硬編碼URL創(chuàng)建三個(gè)HyperLink控件。第一個(gè)超鏈接匹配銷售情況匯總路由的URL模式,第二個(gè)超鏈接匹配名為 SalesRoute 的路由,第三個(gè)超鏈接匹配名為ExpensesRoute 的路由。由于沒(méi)有為第三個(gè)超鏈接的 URL 指定參數(shù),為該路由定義的默認(rèn)值將傳遞給Expenses.aspx。
接下來(lái),將添加標(biāo)記(這些標(biāo)記創(chuàng)建用于指定路由參數(shù)和路由名稱的超鏈接)以創(chuàng)建路由URL。
在“源”視圖中保持Links.aspx 打開(kāi),在上一過(guò)程中創(chuàng)建的HyperLink控件后添加以下代碼:
此標(biāo)記使用 RouteUrl 表達(dá)式創(chuàng)建名為SalesSummaryRoute和SalesRoute的URL。第二個(gè) RouteUrl 表達(dá)式指定路由的名稱,因?yàn)榇a中提供的參數(shù)列表可以匹配 ExpensesRoute URL模式或 SalesRoute URL模式。ExpensesRoute URL 模式具有 SalesRoute URL模式所沒(méi)有的 extrainfo 占位符,但是 extrainfo 是一個(gè)可用于放置各種信息的占位符,這意味著它是可選的。
在下面的過(guò)程中,將添加用于創(chuàng)建超鏈接的標(biāo)記,并通過(guò)指定路由參數(shù)和路由名稱,使用代碼生成超鏈接的 URL。
在“源”視圖中保持 Links.aspx 打開(kāi),在上一過(guò)程中創(chuàng)建的 HyperLink控件后添加以下代碼:
此標(biāo)記不設(shè)置 NavigateUrl 屬性,因?yàn)樵搶傩詫⒃诖a運(yùn)行時(shí)生成。
在“Solution”中,展開(kāi) Links.aspx,然后打開(kāi) 或 Links.aspx.cs。
為 System.Web.Routing命名空間添加 using 語(yǔ)句,如下面的示例所示:
using System.Web.Routing;
在Page_Load方法中,添加以下代碼:
此代碼創(chuàng)建包含三個(gè)參數(shù)的 RouteValueDictionary 類的實(shí)例。第三個(gè)參數(shù)為 category,它不在 URL 模式中。由于它不在 URL 模式中,category 參數(shù)及其值將呈現(xiàn)為查詢字符串參數(shù)。
在上一步中添加的代碼后面,添加以下代碼:
此代碼通過(guò)調(diào)用RouteCollection類的GetVirtualPath方法,實(shí)例化VirtualPathData對(duì)象。由于 SalesRoute URL 模式和 ExpensesRoute URL 模式具有相似的占位符,因此它調(diào)用接受路由名稱并指定 ExpensesRoute 值的重載。
在上一步中添加的代碼后面,添加以下代碼以設(shè)置超鏈接的 NavigateUrl 屬性:
HyperLink6.NavigateUrl = vpd.VirtualPath;
在 ASP.NET 路由已調(diào)用的 ASP.NET 頁(yè)中,可以在標(biāo)記或代碼中檢索 URL 參數(shù)的值。例如,SalesReport 路由包括名為 locale 和 year 的參數(shù),當(dāng)收到匹配此模式的 URL 請(qǐng)求時(shí),Sales.aspx 頁(yè)中的代碼可能需要將這些參數(shù)的值傳遞給 SQL 查詢。
在下面的過(guò)程中,將使用標(biāo)記訪問(wèn) URL 參數(shù)值。此方法可用于在網(wǎng)頁(yè)中顯示參數(shù)值。
右擊 Web 項(xiàng)目,然后單擊“添加新項(xiàng)”。
顯示“添加新項(xiàng)”對(duì)話框。
選擇 Web 窗體模板,然后將名稱設(shè)置為“Expenses.aspx”。
即會(huì)在“源”視圖中打開(kāi) Expenses.aspx 頁(yè)。
在開(kāi)始和結(jié)束 <div> 標(biāo)記之間添加以下標(biāo)記:
此標(biāo)記使用 RouteValue 表達(dá)式提取并顯示傳遞到頁(yè)面的 URL 參數(shù)的值。
在下面的過(guò)程中,將使用代碼訪問(wèn)參數(shù)值。此方法在您必須以某種方式(例如通過(guò)按此過(guò)程所示將 null 值轉(zhuǎn)換為默認(rèn)值,或通過(guò)將信息傳遞給 SQL 查詢)處理數(shù)據(jù)時(shí)非常有用。
右擊 Web 項(xiàng)目,然后單擊“Add New Item”。
顯示“New Item”對(duì)話框。
選擇“Web 窗體”模板,確保選中“將代碼放在單獨(dú)的文件中”,將名稱設(shè)置為“Sales.aspx”,然后單擊“添加”。
即會(huì)在“源”視圖中打開(kāi) Sales.aspx 頁(yè)。
在開(kāi)始和結(jié)束 <div> 標(biāo)記之間添加以下標(biāo)記:
此標(biāo)記包括 Literal 控件,但不設(shè)置其 Text 屬性,因?yàn)閷⒃诖a中設(shè)置這些屬性。
在“Solution”中,展開(kāi) Sales.aspx,然后打開(kāi)Sales.aspx.cs。
在 Page_Load 方法中,添加以下代碼,將第一個(gè) Literal 控件的 Text 屬性設(shè)置為下列值之一:
文本“所有區(qū)域設(shè)置”(如果 locale 參數(shù)為 null)。
locale 參數(shù)的值(如果 locale 參數(shù)不為 null)。
LocaleLiteral.Text = Page.RouteData.Values["locale"] == null ?
"All locales" : Page.RouteData.Values["locale"].ToString();
在 Page_Load 方法中,添加以下代碼,以將第一個(gè)Literal控件的Text 屬性設(shè)置為 year URL 參數(shù)的值:
YearLiteral.Text = Page.RouteData.Values["year"].ToString();
現(xiàn)在,可以測(cè)試路由。
在“解決方案資源管理器”中右擊 Links.aspx,并選擇“在瀏覽器中查看”。
該頁(yè)將在瀏覽器中顯示,如下圖所示:
單擊每個(gè)超鏈接。
請(qǐng)注意,每個(gè)超鏈接轉(zhuǎn)到一個(gè)其標(biāo)題對(duì)應(yīng)于該超鏈接的文本的頁(yè)面。
回到 Links.aspx 頁(yè),選擇瀏覽器的“查看源”命令,檢查最后三個(gè)超鏈接的 URL。
您將看到下面的自動(dòng)生成的 URL:
http://[server]/[application]/SalesReportSummary/2011
http://[server]/[application]/SalesReport/CA/2009
http://[server]/[application]/ExpenseReport/CA/2008?category=recreation
將以 SalesReport/CA/2009 結(jié)束的 URL 復(fù)制到 Windows 剪貼板,然后關(guān)閉“查看源”窗口。
將該 URL 粘貼到瀏覽器的地址欄中,將 CA 更改為“invalidlocale”,將 2009 更改為“invalidyear”,然后按 Enter。
將顯示類似下圖的頁(yè)面:
您可以看到顯示 invalidlocale 和 invalidyear 值的銷售報(bào)表頁(yè)。由于沒(méi)有為 SalesRoute 路由指定任何約束,因此接受無(wú)效數(shù)據(jù)。
再次將該 URL 粘貼到瀏覽器的地址欄中,將 CA 更改為“invalidlocale”,將 2009 更改為“invalidyear”,將 SalesReport 更改為“ExpenseReport”,然后按 Enter。
將顯示類似下圖的頁(yè)面:
由于 URL 未解析為路由,您會(huì)看到“未找到”錯(cuò)誤。ExpenseReport 路由將僅接受具有兩個(gè)字母字符的 locale 參數(shù)和具有四位數(shù)字的 year 參數(shù)。
聯(lián)系客服