如何在 Url.Action 中传递区域?

Posted

技术标签:

【中文标题】如何在 Url.Action 中传递区域?【英文标题】:How to pass Area in Url.Action? 【发布时间】:2015-08-01 04:54:35 【问题描述】:

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() 传递区域?

【问题讨论】:

Url.Action("actionName", "controllerName", new Area = "areaName" ); 根区new Area = "" 【参考方案1】:

你可以使用这个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" 
            );
        

【讨论】:

【参考方案2】:
@Url.Action("action", "controller", new  Area = "areaname" );
@Html.ActionLink("LinkName", "action", "controller", new  area = "areaname" , new  @class = "btn btn-cool" )

将区域名称写入带有匿名对象的 html 属性。你可以使用 actionlink html helper 扩展方法来实现同样的事情。

【讨论】:

【参考方案3】:
@Url.Action("action", "controller", new  Area = "areaname" );

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

你可以在这个上面使用

【讨论】:

【参考方案4】:

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

Url.Action("ShowImage", "Page", new  Area = "" )

【讨论】:

以上是关于如何在 Url.Action 中传递区域?的主要内容,如果未能解决你的问题,请参考以下文章

Url.Action:如何将参数从视图传递到控制器?

如何使用 Url.Action 在 asp.net core 2.0 razor 页面中传递多个操作

使用 Url.action() 传递动态 javascript 值

如何将正确的 Url.Action 传递给 JQuery 方法而没有额外的 & 号麻烦?

如何在 Url.Action 中发送多个参数?

MVC - 将整个模型作为参数传递给 JavaScript 中的 Url.Action