0

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

路线:

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

两个路由 URL 都需要以“活动”开头。

我怎样才能做到这一点?

4

3 回答 3

1

如果路由中的category和page参数都是数字,ASP.NET是没有办法辨别的,所以比如/activities/2会匹配第一个路由,然后处理...

如果它们不同,例如 category 是一个字符串而 page 是一个数字,您可以为 MapPageRoute 提供此重载,您可以在其中为规则提供默认值和约束(例如,对于/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} 路由放在上面,所以它首先被评估,任何过去的东西都会被下一个规则拦截。

于 2012-10-20T19:58:02.493 回答
0

问题是它不知道他是通过category还是page

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

于 2012-10-20T13:14:01.457 回答