1. ホーム
  2. asp.net-mvc

Url.ActionでAreaを渡すには?

2023-12-06 12:52:12

質問

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()を使ってどのようにAreaを渡すのでしょうか?

どのように解決するのですか?

この 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" }
            );
        }