2013-04-13 87 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,我不确定我是否遵守。这是一条完全不同于上述路线的路线。基于你定义的方式,它应该工作得很好。 –