使用Asp.Net4新特性路由创建WebForm应用

 

ASP.NET 4 中的路由

1.         简介:

ASP.NET 4 增加了对使用 Web 窗体进行路由的内置支持。 路由是 ASP.NET 3.5 SP1 引入的一项功能,通过此功能可将应用程序配置为使用对用户和搜索引擎有意义的 URL,这样无需指定物理文件名。 使用这项功能,可以提高站点的用户友好度,并增加站点内容被搜索引擎发现的概率。

因此,我们可以使用在WebForm中使用路由,可以创建出类似mvc的那样简洁的url.比如:以前在asp.net的中,我们的url一般是http://xray2005.cnblogs.com/artcile.aspx?id=1 这样的.现在如果使用asp.net的路由,那么我们的url可能就是这样: http://xray2005.cnblogs.com/artcile/1 这样了,不需要想以前一样通过urlrewrite来实现了.下面介绍具体的步骤.

2.         准备环境:

下面的例子是在Window7(IIS7.5)+VS2010的环境实现的.当然也可以使用VS2008 SP1实现(但具体代码存在一些差异)

3.         添加路由规则:

首先使用asp.net创建一个空的web应用程序,然后添加全局文件Global.asax,引用命名空间System.Web.Routing,(如果没有的话,则向项目中添加对System.Web.Routing的引用)然后在Application_Start

事件中注册相应的路由.示例代码如下:

using System.Web.Routing;

 

protected void Application_Start(object sender, EventArgs e)

        {

            RegisteRoutes(RouteTable.Routes);

        }

 

        private void RegisteRoutes(RouteCollection routes)

        {

            routes.MapPageRoute("", "", "~/Default.aspx");

            routes.MapPageRoute("list", "Items/{action}", "~/Items/list.aspx", false, new RouteValueDictionary { { "action", "all" } });

            routes.MapPageRoute("show", "Show/{action}", "~/show.aspx", false, new RouteValueDictionary { { "action", "all" } });

            routes.MapPageRoute("edit", "Edit/{id}", "~/edit.aspx", false, new RouteValueDictionary { { "id", "1" } }, new RouteValueDictionary { { "id", @"\d+" } });

 

        }

其中需要说明的是asp.net 4中使用routes.MapPageRoute方法来添加相应的路由规则.它和.net 3.5 sp1中的routes.add是一样的.只不过更方便些.

routes.MapPageRoute:提供用于定义 Web 窗体应用程序的路由的方法。 有如下重载:

MapPageRoute(String, String, String)   

MapPageRoute(String, String, String, Boolean) 

MapPageRoute(String, String, String, Boolean, RouteValueDictionary)

MapPageRoute(String, String, String, Boolean, RouteValueDictionary, RouteValueDictionary)

MapPageRoute(String, String, String, Boolean, RouteValueDictionary, RouteValueDictionary, RouteValueDictionary) 

具体每个方法的解析可以查看msdn

 

下面就是对应注册的路由规则,来创建普通的ASP.NET页面了,Default.aspx,show.aspx.edit.aspx等等.然后,我们就可以在运行例子来看看效果先了.如下图所示:

 

 

 

4.         获取URL中的参数

Page.RouteData中包含我们需要的URL参数.因此,我们可以通过以下方法来获取URL中的参数,如下:

方法一:在后台.CS文件写如下代码:

 

         if (Page.RouteData.Values.ContainsKey("id"))

                this.lb.Text = Page.RouteData.Values["id"].ToString();

方法二:在页面中直接使用RouteValue,如下:

          <asp:Label ID="lb1" runat="server" Text="<%$RouteValue:id%>"></asp:Label>

 

 

5.         页面url连接的创建

在实际应用肯定是要页面跳转的,asp.net4提供了多种方法来创建符合路由规则的页面url。具体如下:

方法一:

直接按照规则,来创建url,如下:

        <asp:HyperLink ID="link1" runat="server" Text="Show All" NavigateUrl="~/show/all">

        </asp:HyperLink>

        <br />

        <asp:HyperLink ID="HyperLink1" runat="server" Text="Edit 1" NavigateUrl="~/Edit/1">

        </asp:HyperLink>

方法二:

使用RouteUrl来创建url,如下:

        <asp:HyperLink ID="HyperLink2" runat="server" Text="RouteUrl Show All " NavigateUrl="<%$RouteUrl:routename=show%> ">

        </asp:HyperLink>

        <br />

        <asp:HyperLink ID="HyperLink3" runat="server" Text="RouteUrl Edit 2" NavigateUrl="<%$RouteUrl:id=2,routename=edit %>">

        </asp:HyperLink>

        <br />

这里,我们通过指定routename使得应用能够正确的引用规则,以便避免规则的混淆等等。

方法三:

通过.cs后台代码来现实,比如:页面有个超连接,如下:

        <asp:HyperLink ID="HyperLink4" runat="server" Text="Code behind Edit 2">

        </asp:HyperLink>

那么,后台.cs代码可以来给HyperLinkurl赋值:

RouteValueDictionary p = new RouteValueDictionary { { "id", "3" } };

            VirtualPathData vpd = RouteTable.Routes.GetVirtualPath(null, "edit", p);

            this.HyperLink4.NavigateUrl = vpd.VirtualPath;

至此,我们示范了如何使用asp.net 4中的路由来创建相应的webform应用。

posted @ 2011-07-03 22:00  ♂风车车  阅读(4309)  评论(3编辑  收藏  举报