程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET MVC中在路由表routes集合中添加Route實例的問題

ASP.NET MVC中在路由表routes集合中添加Route實例的問題

編輯:關於ASP.NET

昨天有位同學問到關於在routes集合中添加自定義的路由實例的問題,她出現的問題是這樣的:

1.因為要在應用程序戾動時將實例添加到routes表中,所以需要把代碼寫在Global類的RegisterRoutes方法中,代碼如下兩種方式:

   routes.Add("s", new Route("a/b", new WebFormRouteHandler("~/WebForm1.aspx")));

   routes.Add("a", new Route("c/b", new RouteValueDictionary { { "controller", "Default" }, { "Home", "Index" } }, new WebFormRouteHandler("~/WebForm1.aspx")));

其中,a為路由的名稱,Route為路由的實例,同時,用到了一個WebFormRouteHandler的自定義類,該類的作用為處理一個虛擬路徑並指定到一個實際的地址,具體代碼如下:

public class WebFormRouteHandler : MvcRouteHandler 
        { 
            private string VirtualPath; 
            public WebFormRouteHandler(string path) 
            { 
                VirtualPath = path; 
            } 
     
            protected override IHttpHandler GetHttpHandler(RequestContext requestContext) 
            { 
                var page = BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof(Page)) as IHttpHandler; 
     
                return page; 
            } 
        }

她的問題是,用上邊第一種方式,那麼在做RedirectToAction()操作時,就會直接跳轉到WebForm1.aspx頁面,而使用第二種方式時,則正常,只有在訪問c/b時,才會訪問到該頁面。

對比上面兩段代碼,實際上第二種方式只是多了一個關於RouteValueDictionary類的實例,微軟官方對這個實例的定義為:

表示不區分大小寫的鍵/值對的集合,您可以在路由框架中的不同位置(例如,在定義路由的默認值時或在生成基於路由的 URL 時)使用該集合。

其實這個對象的創建,可以為url也就是c/b定義了一種默認的訪問規則,那麼url就一定會按照這種規則去訪問指定的頁面。

本文出自 “張劍的技術專欄” 博客,請務必保留此出處http://jianle.blog.51cto.com/429692/727680

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved