1

编码 :

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());
}

这些路由 URL 可以从 default.aspx 页面中的不同链接标记调用,但问题是当我尝试访问 partner.aspx 时,它会将我重定向到 PartnerDetails.aspx 我很困惑为什么会出现这种奇怪的行为?什么是解决方案?

4

1 回答 1

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"
    });

但让我们分解一下。使用constraintsRegex 确定键所在位置的字符串值(例如 PartnerID)是否匹配。如果没有,则跳过该路线,并继续前进到下一条。但我想让你想想为什么它也不起作用。假设您必须编写代码来解释路由,并且您得到了这样的链接:

http://.../Partner/123

那不匹配"Partner/{PartnerName}"吗?我的意思{PartnerName}是不是以任何方式输入的,它只是一个占位符,对吗?

希望这是有道理的。

于 2013-04-13T09:37:47.597 回答