0
我已经写了一段时间的博客作为一个学习项目,并且我刚刚重写了我的URL结构以改进我的控制器的组织。这个过程相当顺利,但是我遇到了一个冲突路线的小问题。ASP.NET MVC 3:解决路由冲突
我想设置我的URL结构如下:
/
/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路线匹配。
感谢您的回复。你的建议听起来像我想要的,但我似乎无法得到它的工作。我在我的'/ admin'页面上有一个链接,我想要进入主页。我试过使用'@ Html.RouteLink(“Test”,“Default”)来匹配我的默认路由,但是虽然它呈现链接,但href是空白的,所以它只是再次回到'/ admin' 。我的参数与方法签名相匹配,所以我不确定发生了什么。 –
好的,这似乎是'Html.RouteLink'(也是'Url.RouteUrl')的一个小问题。从Scott Gu的帖子[这里]找到并解决了这个问题(http://weblogs.asp.net/scottgu/archive/2008/04/16/asp-net-mvc-source-refresh-preview.aspx)。感谢您的帮助,Arjan。 :) –