在Asp.net MVC 4中指定area属性时,ActionLink和Url.Action将定位不同的位置

时间:2013-12-23 07:52:07

标签: c# asp.net asp.net-mvc

在_LoggedInUser.cshtml中(位于应用程序根目录下的Views / Shared文件夹中)视图我想调用AC控制器的Logout方法。我有两个选择:

使用ActionLink

@Html.ActionLink("Logout", "Logout", "AC", new { area = string.Empty })

OR

<a href="@Url.Action("Logout", "AC", new { area = string.Empty })">Logout</a>

我指定区域是因为我想调用AC控制器的动作方法而不管它所在的区域。

据我所知,@ Html.ActionLink()和@ Url.action之间的区别是首先生成一个锚标记,其中第二个返回一个网址(如果我错了请纠正我),所以我猜两个都应该定位到同一位置,但@ Html.ActionLink有以下链接位置:

http://localhost:13974/Home/logout?Length=2

<a href="@Url.Action( ....有以下链接位置:

http://localhost:13974/AC/Logout

当删除区域属性时,两个链接都正常工作,但是当我指定区域时,@ Html.ActionLink()会中断

为什么在指定区域时两个链接都定位到不同的位置?

3 个答案:

答案 0 :(得分:20)

您可以使用

@Html.ActionLink("Logout", "Logout", "AC", new { area = string.Empty }, null)

您可以使用重载,LinkExtensions.ActionLink Method (HtmlHelper, String, String, String, Object, Object)

有关详细信息,请访问LinkExtensions.ActionLink

此外,

LinkExtensions.ActionLink Method (HtmlHelper, String, String, String, Object)

没有重载

答案 1 :(得分:3)

你想要的是这个重载:

// linkText,actionName,controllerName,routeValues,htmlAttributes

<%=Html.ActionLink("Logout", "Logout", "AC", new {area = string.Empty}, null) %>

尝试告诉我们这是否可以解决问题。

答案 2 :(得分:1)

您正在使用ActionLink方法的错误重载。将其更改为

@Html.ActionLink("Logout", "Logout", "AC", null, new { area = string.Empty })