如何在动作链接中指定区域名称?

我有一个共享的母版页,我在我的mvc 2应用程序中从2个不同的区域使用。 母版页有一个动作链接,当前指定了控制器和动作,但当然如果我在错误的区域,链接不起作用。 我看到没有超载的actionlink需要一个区域参数,有没有可能做?

弄清楚了..

Html.ActionLink("Link Text", "ActionName", "ControllerName", new { Area = "AreaName" }, new{}) 

之后我碰到的东西,我想其他人可能会遇到:如果你需要从一个区域内链接到一个不在一个区域的动作,你仍然需要指定区域为空string。

例如,我将一些MVC代码移到了一个区域,发现我需要更新引用网站上其他页面的母版页的URL。

要指定不属于某个区域的url,请使用

 Html.ActionLink("home", "Index", new { area = "", controller = "Home" }) 

使用:

  Html.ActionLink("Text", "ActionName", "ControllerName", new { Area = "AreaName" }, null) 

注意 :第四个参数是传递路由的Values ,如果你传递一个空参数,它会考虑根结构,如果你传递适当的值,它将它用作区域。

另外,不要忘记使用nullnew{}作为第五个参数,因为在创build动作链接时传递nullnew {}不会为(text,action,controller,route data)或其(text,action,controller,route data,html attribute)所以使用适当的方法

在MVC2给area="root"为我工作如下

 Html.ActionLink("Home", "Index", "Home", new { Area = "root" }, new{}) 

如果您在View中使用很多区域,则可以使用一个简洁的技巧,将其定义为顶部的variables:

 @{ var awesomeArea = new { area = "Awesome" }; } @Html.Action("Something", "Somewhere", awesomeArea) @Html.ActionLink("Stuff", "FooBar", awesomeArea) 

这是我想出来的解决scheme,允许用户链接到预build的身份validation系统。

我的每个区域都有一个_LoginPartial.cshtml文件的版本。

我可能可以让应用程序使用单个版本的文件,但是当我尝试使用单个login部分时,我仍然遇到了错误。

它只是对原生成的login部分进行了轻微的修改,但在特定的区域使用时似乎效果不错。

下面是在所有这些代码中使用的代码:

 @if (Request.IsAuthenticated) { <text> Hello, @Html.ActionLink(User.Identity.Name, "Manage", "Account", new { area = "" }, htmlAttributes: new { @class = "username", title = "Manage" })! @using (Html.BeginForm("LogOff", "Account", new { area = "" }, FormMethod.Post, new { id = "logoutForm" })) { @Html.AntiForgeryToken() <a href="javascript:document.getElementById('logoutForm').submit()">Log off</a> } </text> } else { <ul> <li>@Html.ActionLink("Register", "Register", "Account", new { area = "" }, htmlAttributes: new { id = "registerLink" })</li> <li>@Html.ActionLink("Log in", "Login", "Account", new { area = "" }, htmlAttributes: new { id = "loginLink" })</li> </ul> }