2011-12-29 53 views
1

我會盡力解釋這一點,我可以。ASP.NET 4.0 URL路由 - 類似MapPageRoutes

我創建了一個CMS,允許您創建類別和內容部分。兩者都有完全不同的模板,但我希望在路由時使用相同的URL路由mapPageRoute參數。基本上,我需要它來檢查別名是否是一個類別,如果沒有命中內容部分路由器。

這裏是我的Global.asax註冊途徑:

void RegisterRoutes(RouteCollection routes) 
{ 
    routes.MapPageRoute(
     "Home", 
     string.Empty, 
     "~/Default.aspx" 
    ); 

    routes.MapPageRoute(
     "Category", 
     "{*CategoryAlias}", 
     "~/templates/Category.aspx" 
    ); 

    routes.MapPageRoute(
     "Content", 
     "{*ContentAlias}", 
     "~/templates/Content.aspx" 
    ); 
} 

目前,分類做工精細,但是當我把內容片斷別名它擊中的類別,不跳到下一個路由URL嘗試。 Category.aspx和Content.aspx Web表單具有完全不同的視圖。後面的代碼很相似,但可以訪問類別表/過程和其他內容。

如果有人需要更多信息,只需詢問。

回答

1

你有沒有試過類似的東西?

void RegisterRoutes(RouteCollection routes) 
{ 
    routes.MapPageRoute( 
     "Home", 
     string.Empty, 
     "~/Default.aspx" 
    ); 

    routes.MapPageRoute( 
     "Category", 
     "Category/{Cat}/{*queryvalues}", 
     "~/templates/Category.aspx" 
    ); 

    routes.MapPageRoute( 
     "Content", 
     "Content/{Cont}{*queryvalues}", 
     "~/templates/Content.aspx" 
    ); 
} 

然後確保URL在路徑中具有Category或Content。您仍然獲得捕獲所有與​​

編輯:

如果你有以下URI http://www.example.com/Content/Press您可以通過使用訪問Press如下:

Page.RouteData.Values["Cont"].ToString(); 

所以,在你Content.aspx頁,抓住該字符串,然後使用它來確定用戶試圖訪問哪個站點。

您需要包含某種靜態URL區分標記,以便MapRouter可以找到該頁面的映射位置。

如果不包括在URI開頭的靜態CategoryContent,該MapRouter永遠是滿意的第一張地圖(類別映射),從不知道要跳過它。

+0

是的,這是事情,我不希望有一個額外的參數在URL中。我希望它是www.website.com/category或www.webiste.com/content – balexander 2011-12-29 05:51:31

+0

* queryvalues是一個捕獲所有。這些路線圖捕獲www.website.com/Category或www.webiste.com/Content以及www.website.com/Category/foo或www.webiste.com/Content/foo/bar?m=rand – 2011-12-29 15:32:12

+0

說我有一個名爲「新聞」的內容部分和一個名爲「新聞」的類別如果URL是www.website.com/Press或www.website.com/News是否知道如果第一個模板是錯誤的,則切換到後者模板? – balexander 2011-12-29 16:56:08