zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    mongodb一个关键字对多个字段同时查询,mongodb $or $and查询
    用Supervisord管理Python进程
    ImportError No module named memcache
    eclipse项目显示标尺
    Eclipse 安装插件后不显示的解决办法
    Flutter入门到放弃笔记(一)--Mac电脑配置Flutter环境
    iOS 动态库、静态库相关
    iOS 获取手机后台音频状态以及类别
    Swift 懒加载
    Swift中@ojbc 重载用法
  • 原文地址:https://www.cnblogs.com/fumj/p/2578542.html
Copyright © 2011-2022 走看看