在网站的每个链接上设置默认区域 - 避免`,new {area =“”}`

时间:2010-02-16 05:29:22

标签: .net asp.net-mvc asp.net-mvc-areas

此代码位于母版页内:

<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>

所有链接都有效,直到我要去区域链接。当我去那里时,主要区域的所有路线都不起作用。

要解决这个问题,我可以使用它:

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

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

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

2 个答案:

答案 0 :(得分:10)

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

因此,如果您想从子区域链接到根区域,则无法避免。

答案 1 :(得分:4)

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

MvcFutures方法调用ExpressionHelper.GetRouteValuesFromExpression(),它在控制器上查找ActionLinkAreaAttribute以确定区域。因此,您可以按如下方式在主“区域”中修饰控制器:

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

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

<%= Html.ActionLink<HomeController>(c => c.Index(), "Home") %>