21

我正在使用以下方法将部分操作中的菜单直接渲染到布局:

@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”拉入,则不会渲染参数并且链接是干净且正确的。(虽然我不想将其呈现为部分内容,所以请不要将其作为建议提供;)

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

4

3 回答 3

30

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

routes.MapRoute(
"Default",
"{controller}/{action}/{i​d}",
new { controller = "Home", action = "Index", area = "", id = UrlParameter.Optional });
于 2011-12-19T11:21:52.507 回答
10

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

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

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

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

<# if (MvcVersion >= 2) { #>result.RouteValueDictionary.Add("Area", area ?? "");<# } #> 
于 2011-07-20T06:23:26.297 回答
0

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

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

确保您AreaRegistration.RegisterAllAreas();的 Global.asax 中有电话

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

于 2021-04-08T10:11:43.170 回答