web-dev-qa-db-fra.com

Comment spécifier un nom de zone dans un lien d'action?

J'ai une page principale partagée que j'utilise depuis 2 zones différentes dans mon application mvc 2. La page maître a un lien d'action qui spécifie actuellement le contrôleur et l'action, mais bien sûr, le lien ne fonctionne pas si je me trouve dans la mauvaise zone. Je ne vois pas de surcharge pour actionlink qui prend un paramètre de zone, est-il possible de le faire?

154
Jeremy

Deviner..

Html.ActionLink("Link Text", "ActionName", "ControllerName", new { Area = "AreaName" }, new{})
242
Jeremy

Quelque chose que j'ai rencontré juste après cela et que j'imagine que d'autres pourraient rencontrer: Si vous devez créer un lien depuis une zone vers une action ne se trouvant pas dans une zone, vous devez toujours spécifier la zone en tant que chaîne vide.

Par exemple, j'ai déplacé du code MVC dans une zone et j'ai constaté que je devais mettre à jour les URL de la page maître faisant référence à d'autres pages du site.

Pour spécifier une URL à quelque chose qui ne se trouve pas dans une zone, utilisez

Html.ActionLink("home", "Index", new { area = "", controller = "Home" })
78
Frank Schwieterman

Utilisation:

 Html.ActionLink("Text", "ActionName", "ControllerName", new { Area = "AreaName" }, null)

Note: Le 4ème paramètre est de passer route Values, si vous passez un paramètre vide, il considérera la structure racine et si vous transmettez une valeur appropriée, il l'utilisera comme zone.

N'oubliez pas non plus d'utiliser null ou new{} comme cinquième paramètre car passer null ou new {} lors de la création du lien d’action, la méthode ne sera pas surchargée pour (text,action,controller,route data) ou son (text,action,controller,route data,html attribute) donc utilisez la bonne méthode

13
Subhash Rao

Dans MVC2 donnant area="root" a travaillé pour moi comme ci-dessous

Html.ActionLink("Home", "Index", "Home", new { Area = "root" }, new{})
11
Sreejith

Une astuce que vous pouvez faire si vous utilisez beaucoup une zone dans une vue est de la définir comme variable en haut:

@{ var awesomeArea = new { area = "Awesome" }; }

@Html.Action("Something", "Somewhere", awesomeArea)
@Html.ActionLink("Stuff", "FooBar", awesomeArea)
6
dav_i

Voici ce que j'ai proposé en tant que solution permettant à un utilisateur de se connecter aux systèmes d'authentification prédéfinis.

Chacune de mes zones a une version du fichier _LoginPartial.cshtml.

Je pourrais probablement faire en sorte que l'application utilise une seule version du fichier. Cependant, je rencontrais toujours des erreurs lorsque j'essayais d'utiliser une connexion partielle.

Ce n'est qu'une légère modification du loginpartial généré d'origine, mais il semble bien fonctionner lorsqu'il est utilisé dans des domaines spécifiques.

Voici le code qui est utilisé dans chacun d'eux:

@if (Request.IsAuthenticated)
{
    <text>
    Hello, @Html.ActionLink(User.Identity.Name, "Manage", "Account", new { area = "" }, htmlAttributes: new { @class = "username", title = "Manage" })!
    @using (Html.BeginForm("LogOff", "Account", new { area = "" }, FormMethod.Post, new { id = "logoutForm" }))
 {
        @Html.AntiForgeryToken()
        <a href="javascript:document.getElementById('logoutForm').submit()">Log off</a>
 }
    </text>
}
else
{
    <ul>
        <li>@Html.ActionLink("Register", "Register", "Account", new { area = "" }, htmlAttributes: new { id = "registerLink" })</li>
        <li>@Html.ActionLink("Log in", "Login", "Account", new { area = "" }, htmlAttributes: new { id = "loginLink" })</li>
    </ul>
}
4
Anthony Hart

Si vous ne pouvez pas utiliser le lien d'application Web standard comme À propos, Accueil, Contac, etc. de la région. Vous changez de ligne

@Html.ActionLink("Ana Sayfa", "Index", "Home", new { area = "" }, new {})

de

Vues\Shared _Layout.cshtml

2
ErdincDonmez

Dans mon ASP Net Core, j'ajoute simplement la zone aux attributs html de la manière suivante:

@Html.ActionLink("Link Text", "ActionName", "ControllerName", new { Area = "AreaName" , id = @Model.ID, name = @Model.name })
0
Moleius