Подтвердить что ты не робот

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", параметр не отображается, а ссылка чистая и правильная. (Я не хочу отображать его как частичное, поэтому, пожалуйста, не предлагайте это как предложение;)

Кто-нибудь там сталкивается с этим раньше?

4b9b3361

Ответ 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}/{i​d}",
new { controller = "Home", action = "Index", area = "", id = UrlParameter.Optional });