使用局部视图和自定义 URL 的页面路由

Page Routing with Partial View & Custom URL's

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

我希望能够对 SEO 友好 url,它看起来像这样:

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

我已经为项目/页面实现了这个,但其他页面爆炸了。我使用局部视图在其他页面上显示我的最新项目。此部分视图显示主页、服务、关于等页面上的最后三个项目。

我尝试重新排序我的路线的列出顺序,但它只部分起作用。如果我颠倒路线的顺序,然后页面加载但我的 url 更改为:

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

这是一个link,我在其中传递我的 ID 和 slug:

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

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

请指教。谢谢

您不需要第二条路线,"SeoFriendlyRoute"。只需更改第一条路线以在 url 末尾包含 slug 并将 slug 设为可选。这样,如果您在主页或任何其他不需要 slug 的页面上,它就可以工作。

您可以将控制器保留为 "home",将操作保留为 "Index"。

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