繁体   English   中英

T4MVC @Url.Action(MVC.Controller.Action()) 在QueryString中渲染“?Area=”参数

[英]T4MVC @Url.Action(MVC.Controller.Action()) Renders "?Area=" Parameter in 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 渲染的 Url 在末尾包含“?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”拉入,则不会渲染参数并且链接是干净且正确的。 (虽然我不想将其呈现为部分内容,所以请不要将其作为建议提供;)

有没有人遇到过这种情况?

我以一种非常简单的方式解决了这个问题,只需添加到所有不在区域空白区域路线中的路线,如下所示:

routes.MapRoute(
"Default",
"{controller}/{action}/{i​d}",
new { controller = "Home", action = "Index", area = "", id = UrlParameter.Optional });

这里发生了一些奇怪的事情,我想知道根部是否存在某种 MVC 错误。 即使不使用 T4MVC,如果您编写以下代码,也会发生这种情况:

@Html.ActionLink("Welcome", "Index", "Home", new { Area = "" }, null)

在常规视图中,这不会生成 bogus?Area=,而在 Html.Action 调用中会生成。 我需要问团队中的某个人。

现在,您可以通过在 t4mvc.tt 中删除此行(大约第 310 行)来解决此问题:

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

从工作项 7154 评论复制是@DavidEbbo 提供的解决方案:

一个更简单的解决方法是向您的站点添加一个虚假区域。 例如\n\n- 右键单击项目并选择添加/区域。 将其命名为“Dummy”(或其他名称)\n- 您可以删除其中的所有内容,但 DummyAreaRegistration.cs 文件除外

确保你有AreaRegistration.RegisterAllAreas(); 致电您的 Global.asax

这也适用于适当的属性路由。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM