Routing Allows us to build friendly URL's by
decoupling the URL of the HTTP Request from the physical path of the web form
that serves the Request. Previous versions of ASP.NET allows us to build
freindly URLs but the Routing engine simplifies building friendly URL's. The
routing engine is included in the System.Web.Routing assembly.
Suppose we have a WebForm named SoftwareProducts which is in the folder named
Products .The classic approach to viewing the SoftwareProducts is to point the
URL to the physical location of the SoftwareProducts WebForm. The URL will look
something like /Products/SoftwareProducts.aspx?id=1.
Routing allows us to use the following URL for the above request
/Products/Software/1 ,which is more easier for the user to understand.
In the following example we define routes for SoftwareProducts and
ElectronicProducts WebForms.The RoutingPage WebForm will handle the common
request. Following is the folder structure for the application
We write code that match URL patterns and the code that handles it ,in the
application startup method Application_StartUp of global.asax .We use the new
MapPageRoute method for this purpose. Also we need to import the new
System.Web.Routing namespace which includes the RouteTable class.
protected
void Application_Start(object
sender, EventArgs e)
{
RouteTable.Routes.MapPageRoute(
"Products",
//Route Name
" Products/Software/{ProductId}",//URL
Pattern To Match
"~/RoutingPage.aspx");
//Path To Redirect To The Page
}
This route defines a URL pattern to match and the
WebForm that will actually handle the request for that URL. All requests of the
form Pages/Software/ProductId are handled by RoutingPage.aspx. ProductId here is
the parameter in the URL. The value of ProductId is accessible to
RoutingPage.aspx via the Page.RouteData[] indexer.
In the code of the RoutingPage WebForm we read the value of ProductId and then
redirect to the appropriate page by using the following code.
protected void
Page_Load(object sender,
EventArgs e)
{
//The following code extracts the value of
ProductId parameter
string strProductId =
Page.RouteData.Values["ProductId"].ToString();
if (strProductId ==
"1")
{
Response.Redirect("..\\SoftwareProducts\\SoftwareProducts.aspx");
}
else if
(strProductId == "2")
{
Response.Redirect("..\\ElectronicProducts\\ElectronicProducts.aspx");
}
}
Now if we add Products/Software/1 to the startup URL like :
http://localhost:1497/Products/Software/1 we will see the SofwareProducts page
shown below.
We can also access the route parameters in the markup as
<asp:Label
ID="Label1"
runat="server"
Text="<%$RouteValue:
ProductId %>"
/>
The RouteValue expression makes it easier for us to use route data in markup,
and avoids working with the more complex Page.RouteData in markup.