asp.net-mvc – T4MVC @ Url.Action(MVC.Controller.Action())渲染“?Area =”QueryString中的参数

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – T4MVC @ Url.Action(MVC.Controller.Action())渲染“?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>
           ...

由于某些原因,T4MVC提供的Urls最后包括“?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”拉入,则该参数不会被渲染,并且链接是干净和正确的。 (我不想把它作为一个部分,所以请不要提出这个建议;)

之前有任何人会遇到这个吗?

解决方法

这里有一些奇怪的事情,我想知道是否有一些MVC错误在根。即使没有使用T4MVC,如果你写:
@Html.ActionLink("Welcome","Index","Home",new { Area = "" },null)

在常规视图中,这不会产生虚假的区域=,而在一个Html.Action调用它。我需要问团队的人。

现在,您可以通过在t4mvc.tt中删除此行(围绕第310行)解决方法

<# if (MvcVersion >= 2) { #>result.RouteValueDictionary.Add("Area",area ?? "");<# } #>

猜你在找的asp.Net相关文章