T4MVC @Url.Action(MVC.Controller.Action()) Renders "? Area =" Параметр в QueryString
Я представляю меню из частичного действия непосредственно в макет, используя:
@Html.Action(MVC.Menu.Index())
Это действие определяет, какое из меню частично будет отображаться. Например, публичное меню частичное. Внутри этих партиций я также использую T4MVC для визуализации ссылок:
<ul id="navHolder">
<li class="level1">
<ul class="mainMenu">
<li><b>@Html.ActionLink("Welcome", MVC.Home.Index())</b>
...
По какой-то причине URL-адреса, отображаемые T4MVC, включают в себя "? Area =" в конце:
<ul id="navHolder">
<li class="level1">
<ul class="mainMenu">
<li><b><a href="/home/index?Area=">Welcome</a></b>
...
У меня нет НИКАКИХ областей в моем проекте, и я установил параметр "IncludeAreasToken" равным false. Как ни странно, это происходит только в том случае, если я обрабатываю частичное использование "@Html.Action" - если я вытащил его как "@Html.Partial", параметр не отображается, а ссылка чистая и правильная. (Я не хочу отображать его как частичное, поэтому, пожалуйста, не предлагайте это как предложение;)
Кто-нибудь там сталкивается с этим раньше?
Ответы
Ответ 1
Что-то странное происходит здесь, и мне интересно, есть ли какая-то ошибка MVC в корне. Даже без использования T4MVC это происходит, если вы пишете:
@Html.ActionLink("Welcome", "Index", "Home", new { Area = "" }, null)
В обычном режиме это не генерирует фикцию? Area =, а в вызове Html.Action это делает. Мне нужно спросить кого-то из команды.
Теперь вы можете обходным путем, удалив эту строку (вокруг строки 310) в t4mvc.tt:
<# if (MvcVersion >= 2) { #>result.RouteValueDictionary.Add("Area", area ?? "");<# } #>
Ответ 2
Я решаю эту проблему очень просто, просто добавив ко всем маршрутам, которые не находятся в области пустой области, например:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", area = "", id = UrlParameter.Optional });