Facilitating the Spread of Knowledge and Innovation in Professional Software Development

Write for InfoQ


Choose your language

InfoQ Homepage News Bi-Directional Routing Support in ASP.NET Web Forms 4.0

Bi-Directional Routing Support in ASP.NET Web Forms 4.0

Leia em Português

This item in japanese

The ASP.NET Routing engine was added in .NET Framework 3.5 SP1. Now Microsoft have added better support for using the engine in ASP.NET WebForms 4.0 by using expression builders enabling bi-directional routing.

Channel9 have just published a new episode of 10-4 showing how to use this new functionality in ASP.NET 4.0. In the video Jonathan Carter walk through a simple example of how to enable this in an existing ASP.NET application.

Below is a summary of the code showed in the video. They use the typical example of how Product.aspx?category=jerseys can map to Product/Jerseys. Using the ASP.NET Routing engine this mapping can be added using the RouteTable in Application_Start:

new Route("Product/{name}",
new PageRouteHandler("~/Product.aspx")));

To add bi-directional routing support today, users would have to use URL rewriting on the query string. However, in ASP.NET 4.0 users can register expression builders:

<expressionBuilders ...>
<add expressionPrefix="RouteUrl"
type="System.Web.Compilation.RouteUrlExpressionBuilder" />

<add expressionPrefix="RouteValue"
type="System.Web.Compilation.RouteValueExpressionBuilder" />

The first expression is for getting a URL and the second for getting a value. The $ sign is used to access expressions from an aspx page:

<asp:HyperLink NavigationUrl="<%$ RouteUrl:RouteName=Product, name=Jerseys" 
     runat="server" />

To get the value from the name attribute, users use the Route object instead of the Request object:


or using an expression builder:

<%$ RouteValue:name %>

By using ASP.NET Routing and the new bi-directional support users can decouple URLs from a physical Web Form, allowing friendlier URLs and have search engines discover and use these.

Rate this Article