2016-03-08 52 views
1

我有自定義路由添加一個slu to到我的網址的結尾,包含和Id爲SEO的目的。頁面部分視圖和自定義URL的路由

我希望能有SEO友好的URL,這是這樣的:

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

我已經實現了本作的項目/頁,但其他頁面炸燬。我使用局部視圖在其他頁面上顯示我的最新項目。此部分視圖顯示家庭,服務,約等...頁面上的最後三個項目。

我試着重新排列列出我的路線的順序,但它只是部分起作用。如果我扭轉路線的順序,那麼網頁加載但後來我的網址改成這樣:

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的鏈接和毛坯:

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

我的猜測是,我需要增加另一個路線,但我不知道如何在主頁上使用一個路徑和局部視圖會使用另一種處理這個問題。

請指教。謝謝

回答

0

你不需要第二條路線,「SeoFriendlyRoute」。只需更改第一條路線,將網狀結構包含在網址的結尾處,並使其可選。這樣,如果你在主頁或任何其他頁面,不需要一個slug,它會起作用。

您可以將控制器設置爲「home」,操作爲「Index」。

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