ASP.NET MVC ActionLink在区域之外

33

在MVC中,有时一个简单的任务变成了一个艰巨的挑战。

好的,我有一个名为Admin的区域。在这个区域内的Shared目录下有一个名为"Forbidden"的页面。

目标很简单:我需要创建一个Html.ActionLink,它生成一个链接返回到Admin区域之外的主页。

所以我尝试了<%= Html.ActionLink("返回","Index",new {controller="Home"})%>,它生成的是:

http://localhost/Admin/Home/Index

这是错误的!我想要:

http://localhost/Home/Index

如何从一个区域创建到默认控制器结构的链接?

1个回答

57

试试这个:

<%= Html.ActionLink("Back", "Index", "Home", new { area = "" }, null) %> 

在使用区域(Areas)时,您应该始终通过添加路由值来指定调用的区域,如上所示。如果链接在区域之外(就像您的情况一样),只需为区域使用一个空参数。


有一个很好的扩展程序,在任何ASP.NET MVC项目中我都认为它是必不可少的(T4MVC)。它使您的ActionLinks看起来更加整洁,并保护它们免受错误的影响。

因此,上面的代码将类似于:

<%= Html.ActionLink("Back", MVC.Home.Index()) %>

使用面积时:

<%= Html.ActionLink("Some Link", MVC.Admin.SomeController.SomeAction()) %>

它是在codeplex上的MvcContrib项目的一部分,在这里。你应该考虑使用它。


我试图在我的AreaRegistration默认路由中添加一些技巧,但那并没有起作用。手动指定area = "" 在常规操作链接中可以工作。谢谢。 - kmehta
1
对于表单,您可以这样做:Html.BeginForm("LogOff", "Account", new {area = ""}, FormMethod.Post, new { id = "logoutForm" })) - Rosdi Kasim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接