MVC Actionlink或可能的路由问题



我在应用程序中的路由方面遇到了很多挑战,这里有很多挫折和文章,我以为我已经搞定了,但现在测试了我的应用程序,我遇到了最后一个小故障。

我把默认值移到了底部,把购买路线移到了顶部,然后我发现由于参数不同,我需要为每个页面创建一个路线,因为它破坏了一些东西。

我遇到的最后一个问题是,一旦你点击了从布局页面继承的菜单栏项目(从第一个页面进行的任何点击都能正常工作),你就会在后续页面上的主页之外的任何其他页面上得到错误的结果。

第一页给出的链接类似:

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

后续页面给出:

http://localhost:34396/Products/2/1用于菜单栏上除主页之外的每个链接。

任何想法真的很受欢迎,都会让我发疯,我所做的任何事情都会让它更加崩溃,不确定是因为我做链接的方式,还是因为我的路由中的根本错误。

干杯,史蒂夫。

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

您可以使用@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>

最新更新