Comment passer une zone dans L'Url.D'Action?

le problème en Html.ActionLink () est que vous ne pouvez pas ajouter de contenu html supplémentaire à l'intérieur de la balise qu'il génère. Par exemple, si vous voulez ajouter une icône en plus du texte comme:

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

Utilisant Html.ActionLink(), vous ne pouvez générer:

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

donc, pour résoudre ceci, vous pouvez utiliser Url.Action() pour générer uniquement les URL à l'intérieur de la balise de la forme:

// 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 passer la zone en utilisant L'Url.Action ()?

Merci beaucoup beaucoup d'avance!

42
demandé sur doncadavona 2015-05-20 08:50:01

2 réponses

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

N'oubliez pas non plus d'ajouter l'espace de noms du controller pour éviter tout conflit entre les noms du controller de zone administrateur et les noms du controller du site.

quelque Chose comme ceci

 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" }
            );
        }
66
répondu sakir 2016-10-19 01:18:13
@Url.Action("{action}", "{controller}", new { Area = "areaname" });
@Html.ActionLink("LinkName", "{action}", "{controller}", new { area = "{areaname}" }, new { @class = "btn btn-cool" })

Ecrire le nom de la zone comme attribut html avec l'objet anonymus. vous pouvez utiliser la méthode d'extension HTML helper d'actionlink pour obtenir la même chose.

5
répondu Hardik 2017-02-16 06:05:22