2012-02-21 54 views
0

我在應用程序的路由中遇到了很多挑戰,並且在這裏遇到了很多挫折和文章,我以爲我已經釘了它,但現在已經測試了我的應用程序,最後有一個小故障。MVC動作鏈接或可能的路由問題

我將默認值移動到底部,並將購買路線移動到頂部,然後我發現由於參數不同,我需要爲每個頁面創建一個路線,以便打破某些內容。

我遇到的最後一個問題是,一旦您點擊從佈局頁面繼承的菜單欄項目(從第一個頁面的任何點擊都可以正常工作),您就會在除了Home之外的其他任何事項上得到錯誤的結果頁面。

第一頁給出了類似的鏈接:

http://localhost:34396/Products/2/1

後續頁面給出:

http://localhost:34396/Products/2/1從家裏除了菜單欄上的每一個環節。

任何想法真的很感激,它驅使我堅果和我做的任何事情只是打破它更多,不知道是否因爲我在做我的路由鏈接或它的一個fundemental錯誤的方式。

乾杯, Steve。

<div id="menu-wrapper"> 
    <div id="menu" class="container"> 
     <ul> 
      <li>@Html.ActionLink("Home", "Index", new { AgentId = ViewData["AgentId"], SubAgentId = ViewData["ReferId"] })</li> 
      <li>@Html.ActionLink("Products", "Products", new { AgentId = ViewData["AgentId"], SubAgentId = ViewData["ReferId"] })</li> 
      <li>@Html.ActionLink("Existing Customers", "Existing", new { AgentId = ViewData["AgentId"], SubAgentId = ViewData["ReferId"] })</li> 
      <li>@Html.ActionLink("Claims", "Claims", new { AgentId = ViewData["AgentId"], SubAgentId = ViewData["ReferId"] })</li> 
      <li>@Html.ActionLink("FAQ", "FAQ", new { AgentId = ViewData["AgentId"], SubAgentId = ViewData["ReferId"] })</li> 
      <li>@Html.ActionLink("Contact Us", "ContactUs", new { AgentId = ViewData["AgentId"], SubAgentId = ViewData["ReferId"] })</li> 
     </ul> 
    </div> 


routes.MapRoute(
"Purchase", // Route name 
"Purchase/{AgentId}/{ProductId}/{SchemeId}/{CoverTypeId}/{CoverLevelId/{SubAgentId}",  // URL with parameters 
new { controller = "Home", action = "Purchase", AgentId = UrlParameter.Optional, ProductId = UrlParameter.Optional, SchemeId = UrlParameter.Optional, CoverTypeId = UrlParameter.Optional, CoverLevel = UrlParameter.Optional, SubAgent = UrlParameter.Optional } , // Parameter defaults 
new[] { "BrochureWare.Controllers" } 
); 

routes.MapRoute(
"Products", // Route name 
"Products/{AgentId}/{SubAgentId}", // URL with parameters 
new { controller = "Home", action = "Products", AgentId = UrlParameter.Optional, 
subAgent = 0 }, // Parameter defaults 
new[] { "BrochureWare.Controllers" } 
); 

     routes.MapRoute(
"MoreInfo_Annual", // Route name 
"MoreInfo_Annual/{AgentId}/{SubAgentId}", // URL with parameters 
new { controller = "Home", action = "MoreInfo_Annual", AgentId = 
UrlParameter.Optional, SubAgent = 0 }, // Parameter defaults 
new[] { "BrochureWare.Controllers" } 
); 

      routes.MapRoute(
"FAQ", // Route name 
"FAQ/{AgentId}/{SubAgentId}", // URL with parameters 
new { controller = "Home", action = "FAQ", AgentId = UrlParameter.Optional, SubAgent = 
0 }, // Parameter defaults 
new[] { "BrochureWare.Controllers" } 
); 

      routes.MapRoute(
"Existing", // Route name 
"Existing/{AgentId}/{SubAgentId}", // URL with parameters 
new { controller = "Home", action = "Existing", AgentId = UrlParameter.Optional, 
SubAgent = 0 }, // Parameter defaults 
new[] { "BrochureWare.Controllers" } 
); 

      routes.MapRoute(
"ContactUs", // Route name 
"ContactUs/{AgentId}/{SubAgentId}", // URL with parameters 
new { controller = "Home", action = "ContactUs", AgentId = UrlParameter.Optional,  
SubAgent = 0 }, // Parameter defaults 
new[] { "BrochureWare.Controllers" } 
); 

      routes.MapRoute(
"Claims", // Route name 
"Claims/{AgentId}/{SubAgentId}", // URL with parameters 
new { controller = "Home", action = "Claims", AgentId = UrlParameter.Optional, 
SubAgent = 0 }, // Parameter defaults 
new[] { "BrochureWare.Controllers" } 
); 

      routes.MapRoute(
"Default", // Route name 
"{AgentShortCode}/{referid}", // URL with parameters 
new { controller = "Home", action = "Index", AgentShortCode = "Steve", referid = 1 
}, 
// Parameter defaults 
new[] { "BrochureWare.Controllers" } 
); 

回答

0

您可以使用@ Html.RouteLink,並指定要鏈接到,迫使ASP.NET來接你想使用的路由的路由名稱。

所以你可以做這樣的事情:

<div id="menu-wrapper"> 
    <div id="menu" class="container"> 
     <ul> 
      <li>@Html.RouteLink("Home", "Default", new { AgentId = ViewData["AgentId"], SubAgentId = ViewData["ReferId"] })</li> 
      <li>@Html.RouteLink("Products", "Products", new { AgentId = ViewData["AgentId"], SubAgentId = ViewData["ReferId"] })</li> 
      <li>@Html.RouteLink("Existing Customers", "Existing", new { AgentId = ViewData["AgentId"], SubAgentId = ViewData["ReferId"] })</li> 
      <li>@Html.RouteLink("Claims", "Claims", new { AgentId = ViewData["AgentId"], SubAgentId = ViewData["ReferId"] })</li> 
      <li>@Html.RouteLink("FAQ", "FAQ", new { AgentId = ViewData["AgentId"], SubAgentId = ViewData["ReferId"] })</li> 
      <li>@Html.RouteLink("Contact Us", "ContactUs", new { AgentId = ViewData["AgentId"], SubAgentId = ViewData["ReferId"] })</li> 
     </ul> 
    </div> 
+1

謝謝,部分工作,但仍然得到問題,一旦你導航下降一個等級,我覺得它的路由問題的整體,但我已經有圍繞它的工作兩種佈局,一種是主要的,另一種是所有其他頁面。作品是一種享受,我可以在不浪費多少時間的情況下重新討論。 – 2012-02-21 22:36:54