[英]T4MVC Url.Action(MVC.Area.Controller.Action()) returns null
[英]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}/{id}",
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.