MVC Actionlink или возможные проблемы с маршрутизацией - PullRequest
0 голосов
/ 21 февраля 2012

У меня было несколько проблем с маршрутизацией в моем приложении, и с большим количеством разочарований и статей здесь, я думал, что прибил его, но теперь, когда я протестировал свое приложение, у меня есть последний сбой.

Я переместил значение по умолчанию в нижнюю часть, а маршрут покупки - в верхнюю, и затем обнаружил, что из-за различных параметров мне нужно было создать маршрут для каждой другой страницы, он что-то сломал.

Последняя проблема, с которой я столкнулся, заключается в том, что после того, как вы щелкнете по элементу строки меню, унаследованному от страницы макета (любой щелчок с первой страницы работает правильно), вы получите неправильный результат на любом другом месте, кроме Home на последующих страницах. .

Первая страница дает ссылку как:

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

Последующие страницы дают:

http://localhost:34396/Products/2/1 для каждой ссылки в строке меню, кроме Home.

Любые идеи действительно ценятся, это сводит меня с ума, и все, что я делаю, просто ломает их еще больше, не уверен, что это из-за того, как я делаю ссылки, или из-за фундаментальной ошибки в моей маршрутизации.

Ура, Стив.

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

1 Ответ

0 голосов
/ 21 февраля 2012

Вы можете использовать @ 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>
...