web-dev-qa-db-ja.com

Url.Actionでエリアを渡す方法は?

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()を使用してどのようにエリアを渡しますか?

48
doncadavona

これを使用できます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" }
            );
        }
76
sakir
@Url.Action("{action}", "{controller}", new { Area = "areaname" });
@Html.ActionLink("LinkName", "{action}", "{controller}", new { area = "{areaname}" }, new { @class = "btn btn-cool" })

匿名オブジェクトを使用して、エリア名をhtml属性として書き込みます。 actionlink htmlヘルパー拡張メソッドを使用して同じことを達成できます。

8
Hardik