web-dev-qa-db-fra.com

Comment passer Area in Url.Action?

Le problème dans Html.ActionLink () est que vous ne pouvez pas ajouter de contenu HTML supplémentaire dans la balise générée. Par exemple, si vous souhaitez ajouter une icône en plus du texte, par exemple:

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

En utilisant Html.ActionLink (), vous pouvez uniquement générer:

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

Donc, pour résoudre ce problème, vous pouvez utiliser Url.Action () pour générer uniquement l'URL à l'intérieur de la balise, comme ceci:

// 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>

Alors, comment passez-vous la zone en utilisant Url.Action ()?

48
doncadavona

Vous pouvez utiliser cette Url.Action("actionName", "controllerName", new { Area = "areaName" });

De plus, n'oubliez pas d'ajouter l'espace de noms du contrôleur pour éviter un conflit entre les noms de contrôleur de zone d'administration et les noms de contrôleur de site.

Quelque chose comme ça

 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" })

écrire le nom de la zone en tant qu'attribut HTML avec un objet anonyme. vous pouvez utiliser la méthode d'extension helper actionlink pour atteindre le même objectif.

8
Hardik