重定向到路由给出页面循环

时间:2012-10-20 12:49:52

标签: c# asp.net routing webforms

如果变量为null,我正在尝试重定向到另一条路线。它如何给出重定向循环错误。

路线:

routes.MapPageRoute("activities", "activities/{category}", "~/Pages/showAllActivities.aspx");
routes.MapPageRoute("activitiesSubPage", "activities/{page}", "~/default.aspx");

showAllActivities.aspx上的代码:

if (category != null)
{
    ..
}
else
    Response.RedirectToRoute("activitiesSubPage", new { page = "1"});

两条路线网址都需要以“活动”开头。

我该如何做到这一点?

3 个答案:

答案 0 :(得分:1)

如果路径中的类别和页面参数都是数字,则ASP.NET无法识别,因此,例如,/activities/2将与第一条路线匹配并进行处理......

如果它们不同,例如category是字符串而page是数字,则MapPageRoute有this overload,您可以在其中为规则提供默认值和约束(例如/activities/{page}路线只接受数字:

routes.MapPageRoute("activitiesSubPage", "activities/{page}", "~/default.aspx",
    new RouteValueDictionary() { { "page", 0 } },
    new RouteValueDictionary() { { "page", "[0-9]+" } });
);
routes.MapPageRoute("activities", "activities/{category}", "~/Pages/showAllActivities.aspx");

请记住,此配置会将/activites路由发送到/activities/0,默认为0。我已将{page}路由放在上面,因此首先进行评估,过去的任何内容都会被下一条规则截获。

答案 1 :(得分:0)

问题是它不知道他是否通过categorypage

您可以做的是将其映射到类似/activities/category/{id}(类别ID /名称)和/activities/page/{id}(页面ID)的内容。放/activities/{id}是没有意义的,因为它不是活动ID,而是页码。

答案 2 :(得分:0)