9

此代码位于母版页内:

<li><a href="<%=Url.Action("Action", "Controller") %>">Main site link</a></li>
<li><a href="<%=Url.Action("AreaAction", "AreaController", new {area = "Area"}) %>">Area link</a></li>

在我去Area Link之前,所有的链接都很好用。当我去那里时,主要区域的所有路线都不起作用。

为了解决这个问题,我可以使用这个:

<li><a href="<%=Url.Action("Action", "Controller", new {area = ""}) %>">Main site link</a></li>

我的问题是,有没有办法避免主站点中的, new {area = ""}每个链接?

在网站上的每个链接上都有这个非常烦人。

4

2 回答 2

11

Url 操作与链接的位置相关。所以new {area = ""}不是告诉 Url.Action 调用没有区域,而是告诉它使用root area。如果您new {area = ""}从 Url.Action 调用中省略,它将尝试为当前区域内指定控制器内的指定操作创建一个 url (“区域”在您的情况下)。

因此,如果您想从子区域链接到根区域,这是不可避免的。

于 2010-02-16T18:19:58.850 回答
4

如果您使用标准的 MVC 方法(除了可能覆盖它们来调用您自己的版本),我仍然不知道它,但如果您使用ActionLink<TController>MvcFutures 库中提供的或其他通用方法,那么您可以。

MvcFutures 方法调用ExpressionHelper.GetRouteValuesFromExpression(),它在控制器上查找一个ActionLinkAreaAttribute以确定区域。所以你可以在你的主要“区域”中装饰你的控制器,如下所示:

[ActionLinkArea("")]
[HandleError]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

应使用标准语法正确生成操作链接:

<%= Html.ActionLink<HomeController>(c => c.Index(), "Home") %>
于 2010-03-08T19:15:25.537 回答