74

Html.ActionLink() 中的问题是您不能在它生成的标签内添加额外的 html 内容。例如,如果您想在文本之外添加一个图标,例如:

<a href="/Admin/Users"><i class="fa fa-users"></i> Go to Users</a>

使用 Html.ActionLink(),您只能生成:

<a href="/Admin/Users">Go to Users</a>

因此,要解决此问题,您可以使用 Url.Action() 仅在标签内生成 URL,例如:

// Here, Url.Action could not generate the URL "/admin/users". So this doesn't work.
<a href="@Url.Action("", "Users", "Admin")"><i class="fa fa-usesr"></i> Go to Users</a>

// This works, as we know it but won't pass the Area needed.
<a href="@Url.Action("", "Users")"><i class="fa fa-users"></i> Go to Users</a>

那么,如何使用 Url.Action() 传递区域?

4

4 回答 4

108

你可以用这个Url.Action("actionName", "controllerName", new { Area = "areaName" });

另外不要忘记添加控制器的命名空间以避免管理区域控制器名称和站点控制器名称之间的冲突。

像这样的东西

 public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "Admin_default",
                "Admin/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional },
                  new[] { "Site.Mvc.Areas.Admin.Controllers" }
            );
        }
于 2015-05-20T05:59:26.960 回答
13
@Url.Action("{action}", "{controller}", new { Area = "areaname" });
@Html.ActionLink("LinkName", "{action}", "{controller}", new { area = "{areaname}" }, new { @class = "btn btn-cool" })

将区域名称写为带有匿名对象的 html 属性。您可以使用 actionlink html helper 扩展方法来实现相同的目标。

于 2017-02-16T06:05:22.973 回答
3

如果要为根控制器创建链接,使用以下代码就足够了:

Url.Action("ShowImage", "Page", new { Area = "" })
于 2021-07-31T05:30:07.777 回答
2
@Url.Action("{action}", "{controller}", new { Area = "areaname" });

@Html.ActionLink("LinkName", "{action}", "{controller}", new { area = "{areaname}"}, new { @class = "btn btn-cool" })

你可以在上面使用

于 2020-02-06T09:40:58.753 回答