具有部分视图的页面路由&自定义网址

时间:2016-03-08 18:00:06

标签: asp.net-mvc routing asp.net-mvc-routing

我有自定义路由,可以在我的Urls末尾添加一个slug,其中包含用于SEO的ID。

我希望能够拥有SEO友好的网址,如下所示:

http://localhost:12345/OurWork/Project/26/MortgageBancLLC

我已经为Project / page实现了这个目标,但其他页面却爆炸了。我使用局部视图在其他页面上显示我的最新项目。这个局部视图显示了家庭,服务,约等页面上的最后三个项目。

我试图重新排列列出我的路线的顺序,但它只是部分有效。如果我颠倒了路线的顺序,那么页面加载但我的网址改为:

http://localhost:12345/OurWork/Project/26?slug=CompanyNameHere

以下是我的路线:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default",
                "{controller}/{action}/{id}",
                new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                new[] { "Web.Controllers" }
            );

                //This is my SEO friendly route
                routes.MapRoute(
                    "SeoFriendlyRoute", 
                    "{controller}/{action}/{id}/{slug}",
                    new { controller = "OurWork", action = "Project", id = UrlParameter.Optional, slug = UrlParameter.Optional }
                );

这是我传递我的id和slug的链接:

<a href="@Url.Action("Project", "OurWork", new {id = item.Project.Id, slug = @item.Client.Name })">CompanyName</a>

我的猜测是我需要添加另一条路线,但是当主页使用一条路线而部分视图将使用另一条路线时,我不知道如何处理这条路线。

请指教。感谢

1 个答案:

答案 0 :(得分:0)

你不需要第二条路线,“SeoFriendlyRoute”。只需更改第一个路径,在网址末尾包含slug,并使slug可选。这样,如果您在主页或任何其他不需要slug的页面上,它将起作用。

您可以将控制器保留为“主页”,将操作保留为“索引”。

routes.MapRoute(
                "Default",
                "{controller}/{action}/{id}/{slug}",
                new { controller = "Home", action = "Index", id = UrlParameter.Optional, slug = UrlParameter.Optional },
                new[] { "Web.Controllers" }
            );