ASP.NET 4.0 引入 **雙向路由**:不僅能將 /Product/Jerseys 導向 Product.aspx?category=Jerseys (入站),更能在頁面中用 <%$ RouteUrl:RouteName=Product, name=Jerseys %> 產生正確連結 (出站),徹底解耦 URL 與實體檔案。本文完整示範路由註冊、表達式建構器設定、頁面雙向使用、RouteData 取值與遷移建議。
void Application_Start()
{
RouteTable.Routes.Add("Product",
new Route("Product/{name}",
new PageRouteHandler("~/Product.aspx")));
// 更多路由...
}
<system.web>
<compilation>
<expressionBuilders>
<add expressionPrefix="RouteUrl"
type="System.Web.Compilation.RouteUrlExpressionBuilder" />
<add expressionPrefix="RouteValue"
type="System.Web.Compilation.RouteValueExpressionBuilder" />
</expressionBuilders>
</compilation>
</system.web>
<!-- HyperLink 控件 -->
<asp:HyperLink ID="hlJerseys" runat="server"
NavigateUrl="<%$ RouteUrl:RouteName=Product, name=Jerseys %>"
Text="Jerseys" />
<!-- 純 HTML 錨點 -->
<a href="<%$ RouteUrl:RouteName=Product, name=Jerseys %>">Jerseys</a>
<!-- 代碼後置 Redirect -->
Response.RedirectToRoute("Product", new { name = "Jerseys" });
// 方式 1:RouteData (推薦)
string name = RouteData.Values["name"] as string;
// 方式 2:RouteValue 表達式 (標記中)
<span>Category: <%$ RouteValue:name %></span>
// 方式 3:Page.RouteData (屬性封裝)
string name = Page.RouteData.Values["name"] as string;
<%@ Page Language="C#" %>
<html>
<body>
<h1>產品分類: <%$ RouteValue:name %></h1>
<ul>
<li><a href="<%$ RouteUrl:RouteName=Product, name=Jerseys %>">Jerseys</a></li>
<li><a href="<%$ RouteUrl:RouteName=Product, name=Shoes %>">Shoes</a></li>
</ul>
</body>
</html>
// 約束:name 僅允許字母
routes.Add("Product", new Route("Product/{name}",
new RouteValueDictionary { { "name", "Jerseys" } }, // 預設值
new RouteValueDictionary { { "name", "[a-zA-Z]+" } }, // 約束 Regex
new PageRouteHandler("~/Product.aspx")));
// 區域註冊 (Area)
var areaRoute = new Route("Admin/{controller}/{action}/{id}",
new RouteValueDictionary { { "area", "Admin" } },
new MvcRouteHandler()); // 需 MVC 專案
routes.Add("Admin", areaRoute);
| Web Forms 4.0 | ASP.NET Core |
|---|---|
RouteTable.Routes (靜態) | app.MapControllerRoute / app.MapRazorPages (啟動配置) |
PageRouteHandler | Controller Action / Razor Page |
RouteUrlExpressionBuilder | Url.Action, Url.Page, LinkGenerator |
RouteData.Values | RouteData.Values / HttpContext.GetRouteValue |
核心概念 **「URL 與處理邏輯解耦、雙向生成/解析」** 完全繼承並強化。
ASP.NET 4.0 雙向路由讓 Web Forms 邁向現代化 URL 設計的關鍵一步:**表達式建構器** 橋接標記與路由引擎,**RouteValue/RouteUrl** 實現出站入站無縫切換。儘管 Web Forms 已進入維護模式,但此機制在存量系統 SEO 改造、漸進式遷移中極具價值。新專案請直接擁抱 ASP.NET Core 原生路由。