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

我有一个共享的母版页面,我使用我的 mvc2应用程序从2个不同的地区。母版页面有一个 action 链接,它当前指定了控制器和 action,但是当然,如果我在错误的区域,这个链接就不起作用了。我看到没有重载的动作链接采取一个区域参数,是否可能这样做?

88531 次浏览

想明白了。

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

在这之后我遇到了其他人可能会遇到的问题: 如果你需要从一个区域内链接到一个不在区域内的动作,你仍然需要将 Area 指定为空字符串。

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

若要指定指向不在某个区域中的内容的 URL,请使用

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

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

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

下面是我提出的一个解决方案,它允许用户链接到预构建的身份验证系统。

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

我也许可以让应用程序使用文件的单一版本,但是在尝试使用单一登录部分时总是出错。

它只是对原始生成的 loginpart 的一个小小修改,但是在特定领域中使用时,它似乎工作得很好。

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

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

用途:

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

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

也不要忘记使用 nullnew{}作为第5个参数,因为在创建动作链接时通过 nullnew {}将不会为 (text,action,controller,route data)或其 (text,action,controller,route data,html attribute)重载方法,所以使用适当的方法

如果你经常在视图中使用一个区域,你可以做的一个简单的技巧是把它定义为顶部的一个变量:

@{ var awesomeArea = new { area = "Awesome" }; }


@Html.Action("Something", "Somewhere", awesomeArea)
@Html.ActionLink("Stuff", "FooBar", awesomeArea)

如果您不能使用标准的网络应用程序链接,如关于,主页,联系等地区。您更改行

@Html.ActionLink("Ana Sayfa", "Index", "Home", new { area = "" }, new {})

来自

视图 Shared _ Layout. cshtml

在我的 ASP Net Core 应用程序中,我简单地将这个区域添加到 html 属性中,如下所示:

@Html.ActionLink("Link Text", "ActionName", "ControllerName", new { Area = "AreaName" , id = @Model.ID, name = @Model.name })

吸毒

@Html.ActionLink("DisplayText", "ActionName", "ControllerName", new { area = "AreaName"}, null)

会达到你的目的。

DisplayText 将显示(与 <a href="#">DisplayText</a>相同) ,ActionName 是在控制器中调用的方法,ControllerName 显然是您想要调用的控制器!下一个参数是‘ Route Value’,您可以在其中添加您的区域。例如,如果您当前处于 Area 中,并且想导航回根 Home/Index,那么您应该将该值保留为空字符串,例如 new { area = ""}。最后一个值是“ Html Attritribute”,如果您愿意,可以在这里添加一个类,如果没有要添加的属性,则应该是 null。但是,由于最后一个参数被看作是“ Html 属性”; 为了识别路由值,这个参数应该是 null