我一直在写博客作为学习项目已有一段时间了,我刚刚重写了我的网址结构,以改善我的控制器的组织。这已经相当顺利,但我对一条相互冲突的路线有一点问题。
我正在尝试按以下方式设置我的网址结构:
/
/page/2
/category
/category/page/2
类别存储在数据库中。目前此工作正常,但我刚注意到,当我尝试链接回主页时,它正在点击/page
。
这是我当前的路线表:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Admin",
"admin",
new { controller = "Admin", action = "Index" }
);
routes.MapRoute(
"ShowPagedPostsByCategory",
"{category}/page/{page}",
new { controller = "Posts", action = "Index", page = UrlParameter.Optional },
new { page = @"(\d+)?" }
);
routes.MapRoute(
"ShowPagedPosts",
"page/{page}",
new { controller = "Posts", action = "Index", page = UrlParameter.Optional },
new { page = @"(\d+)?" }
);
routes.MapRoute(
"ShowPostsByCategory",
"{category}",
new { controller = "Posts", action = "Index" }
);
routes.MapRoute(
"ShowTaggedPosts",
"posts/tagged/{tag}",
new { controller = "Posts", action = "ShowTaggedPosts", tag = UrlParameter.Optional }
);
routes.MapRoute(
"EditDeleteComment",
"posts/{action}/{id}",
new { controller = "Posts" },
new { action = @"EditComment|DeleteComment", id = @"\d+" }
);
routes.MapRoute(
"AddComment",
"{controller}/comment",
new { controller = "Posts", action = "Comment" }
);
routes.MapRoute(
"ShowPost",
"{controller}/{PostID}/{*slug}",
new { controller = "Posts", action = "ShowPost", slug = UrlParameter.Optional },
new { PostID = @"\d+" }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Posts", action = "Index", id = UrlParameter.Optional }
);
}
我可以看到问题所在:'/'的主页URL与ShowPagedPosts路由匹配,但是将其移动到默认路由下面似乎是错误的。这让我觉得我的方法有点偏。有人能指出我正确的方向吗?
编辑:实际上,使用RouteDebugger,我可以看到它实际上与ShowPagedPosts 和 ShowPostsByCategory路线匹配。
答案 0 :(得分:2)
使用Html.ActionLink时,将使用第一个匹配路线。
如果您想使用其他特定路线,请使用Html.RouteLink,它将路线名称作为参数。