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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM