此代码位于母版页内:
<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 = ""}
?
在网站的每个链接上都有这个非常烦人。
答案 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") %>