asp.net mvc - Comment passer Area in Url.Action?




asp.net-mvc html-helper (2)

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 cela, 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 ()?


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

@Url.Action("{action}", "{controller}", new { Area = "areaname" });
@Html.ActionLink("LinkName", "{action}", "{controller}", new { area = "{areaname}" }, new { @class = "btn btn-cool" })

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





url.action