asp.net4的webform使用路由

官方示例:

http://msdn.microsoft.com/zh-cn/library/dd329551(d=lightweight).aspx

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

使用步骤:
1.添加全局文件Global.asax,引用命名空间System.Web.Routing,(如果没有的话,则向项目中添加对System.Web.Routing的引用)然后在Application_Start
事件中注册相应的路由.
示例代码如下:

View Code
        protected void Application_Start(object sender, EventArgs e)
        {
            RegisteRoutes(RouteTable.Routes);
        }

        private void RegisteRoutes(RouteCollection routes)
        {
            //其中需要说明的是asp.net 4中使用routes.MapPageRoute方法来添加相应的路由规则.它和.net 3.5 sp1中的routes.add是一样的.只不过更方便些.
            //第一个参数:路由规则名称,用于区别不同的路由规则(随便起)
            //第二个参数:路由规则,{}代表匹配任意,不带{}则表示精确匹配
            //第三个参数:该路由交给那个页面处理,物理页面的路径
            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+" } });
            官方参数说明:

            routeName
            类型:System.String
            路由的名称。
            routeUrl
            类型:System.String
            路由的 URL 模式。
            physicalFile
            类型:System.String
            路由的物理 URL。
            checkPhysicalUrlAccess
            类型:System.Boolean
            一个值,该值指示 ASP.NET 是否应验证用户是否有权访问物理 URL(始终会检查路由 URL)。 此参数设置 PageRouteHandler.CheckPhysicalUrlAccess 属性。 
            defaults
            类型:System.Web.Routing.RouteValueDictionary
            路由的默认值。
            constraints
            类型:System.Web.Routing.RouteValueDictionary
            一些约束,URL 请求必须满足这些约束才能作为此路由处理。
        }

获取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>

方法三: 仍然可以用以前的Request.Form来处理

页面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 />

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

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

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

RouteValueDictionary p = new RouteValueDictionary { { "id", "3" } };
VirtualPathData vpd = RouteTable.Routes.GetVirtualPath(null, "edit", p);
this.HyperLink4.NavigateUrl = vpd.VirtualPath;

方法四:建议写成GetRouteUrl,这样你以后路由规则换了,这个链接也不会失效

<a href="<%=this.GetRouteUrl("my-route-name", new { id="123"}) %>">xxx</a>
posted @ 2012-07-05 22:53  ``炯``  阅读(3544)  评论(1编辑  收藏  举报