我在我的asp.net webforms 3.5sp1項目上安裝了webform路由設置。我希望在包含主頁的內容目錄中包含該站點的文件,因爲我想使用同一個系統運行多個站點。Webform路由主頁在像mvc而不是根目錄的文件夾中
在MVC中有一個空白的默認頁面,主頁位於一個名爲home的文件夾中。我似乎無法複製這種行爲使用web表單路由,但希望。空白頁總是首先被擊中。路由處理程序第二次被觸發 - 它認識到請求是用於主頁並設置了路由頁面但未被使用。路線處理程序代碼很簡單:
public string VirtualPath { get; private set; }
public IHttpHandler GetHttpHandler(RequestContext
requestContext)
{
string file = requestContext.RouteData.GetRequiredString("File");
string id = requestContext.RouteData.GetRequiredString("Id");
string queryString = "?menuid=" + id;
VirtualPath = "~/" + file;
HttpContext.Current.RewritePath(
string.Concat(
VirtualPath,
queryString));
var page = BuildManager.CreateInstanceFromVirtualPath
(VirtualPath, typeof(Page)) as IHttpHandler;
return page;
}
有沒有反正我可以做到這一點?
更新 這裏是我的Global.asax航線代碼:
public static void RegisterRoutes(RouteCollection routes)
{
Domain.RepositoryFactory repo = new RepositoryFactory();
foreach (var x in repo.MenuRepository.GetAllEnabledGetMenus())
{
if (string.IsNullOrEmpty(x.Url))
{
//add default
System.Web.Routing.RouteTable.Routes.Add(
new Route("Default.aspx",
new RouteValueDictionary(new { File = x.FileName,
Id = x.Id.ToString() }),
new CoreRouteHandler()));
}
else
{
string url = x.Url;
if(x.Url.StartsWith("/"))
{
url = url.Remove(0, 1);
}
System.Web.Routing.RouteTable.Routes.Add(
new System.Web.Routing.Route(url,
new RouteValueDictionary(new {File = x.FileName,
Id = x.Id.ToString()}),
new CoreRouteHandler()));
}
}
}
不要以爲你需要虛擬路徑的'〜'。請說明你如何在Global.asax中設置你的路線?路由處理程序應始終首先被擊中! – Markive 2010-08-18 10:18:22
我已添加全局代碼。當我一步一步通過default.aspx頁面加載時,首先命中路由處理程序。所有其他頁面的路線很好。 – 2010-08-18 11:47:04
如果我刪除〜我得到一個錯誤在這裏不允許相對虛擬路徑[x]。 – 2010-08-18 11:49:06