我有自定义路由,可以在我的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>
我的猜测是我需要添加另一条路线,但是当主页使用一条路线而部分视图将使用另一条路线时,我不知道如何处理这条路线。
请指教。感谢
答案 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" }
);