2013-04-13 122 views
1

代碼:路由表問題路由多個URL以相同的模式

public static void RegisterRoutes(System.Web.Routing.RouteCollection routes) 
{ 
    routes.MapPageRoute("Partners Details", "Partner/{PartnerName}", "~/Partners/PartnerDetails.aspx", false, new RouteValueDictionary()); 
    routes.MapPageRoute("Partners Offers", "Partner/{PartnerID}", "~/Partners/Partners.aspx", false, new RouteValueDictionary()); 
} 

這些路由地址可以從不同的鏈接標籤在Default.aspx頁面被調用,但問題是,當我嘗試訪問partners.aspx它會將我重定向到PartnerDetails.aspx,我很困惑,爲什麼這種奇怪的行爲?什麼是解決方案?

回答

1

所以問題是,路線是相同的除了的數據類型。但是,您尚未爲這些路線指定constraints。所以讓我們這樣做:

routes.MapPageRoute("Partners Details", 
    "Partner/{PartnerName}", 
    "~/Partners/PartnerDetails.aspx", 
    false, 
    new RouteValueDictionary(), 
    new RouteValueDictionary() { 
     "PartnerName", "[a-zA-Z\s]" 
    }); 

routes.MapPageRoute("Partners Offers", 
    "Partner/{PartnerID}", 
    "~/Partners/Partners.aspx", 
    false, 
    new RouteValueDictionary(), 
    new RouteValueDictionary() { 
     "PartnerID", @"\d" 
    }); 

但讓我們來分析一下。 constraints使用Regex來確定鍵位置(例如PartnerID)中的字符串值是否匹配。如果沒有,則跳過該路線,然後轉到下一個路線。但是我想讓你想一想爲什麼它不起作用。比方說,你必須編寫代碼來解釋路線和你有一個像這樣的鏈接:

http://.../Partner/123 

沒有那場比賽"Partner/{PartnerName}"?我的意思是{PartnerName}不是以任何方式鍵入的,它只是一個佔位符權利?

希望這是有道理的。

+0

感謝ü你的答覆,這是真的有用 – Sora

+0

但我仍然有一個問題,如果比方說,我有一個像另一條路線:routes.MapPageRoute(「合作伙伴優惠」, 「存儲/ {} STOREID」, 「〜/ (), 「StoreID」,@「\ d」 });我認爲問題可能仍然存在嗎? – Sora

+0

@Sora,我不確定我是否遵守。這是一條完全不同於上述路線的路線。基於你定義的方式,它應該工作得很好。 –