158 votes

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

J'ai une page maître partagée que j'utilise à partir de 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 suis dans la mauvaise zone. Je ne vois pas de surcharge pour actionlink qui prenne un paramètre de zone, est-ce possible ?

250voto

Jeremy Points 14078

J'ai compris

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

4 votes

@Pure.Krome - oui. Il n'y a rien d'intuitif là-dedans !

3 votes

Assurez-vous qu'il n'y a pas d'espace blanc avant ou après l'Areaname. Sinon, il l'ignorera... et vous demandera pendant quatre heures ce qui ne va pas... tout comme moi.

0 votes

Comment y ajouter des paramètres ?

79voto

Frank Schwieterman Points 13519

Une chose que j'ai rencontrée juste après, et que j'imagine que d'autres pourraient rencontrer : Si vous avez besoin de créer un lien à partir d'une zone vers une action qui n'est pas dans une zone, vous devez toujours spécifier la zone comme une chaîne vide.

Par exemple, j'ai déplacé du code MVC dans une zone, et j'ai découvert que je devais mettre à jour les urls de la page principale qui faisaient référence à d'autres pages du site.

Pour spécifier une url vers quelque chose qui n'est pas dans une zone, utilisez

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

4 votes

C'est un très bon conseil ! Mais elle ne donne pas les résultats escomptés avec MVC 2.. Petite correction - Html.ActionLink("home", "Index", new { area = "", controller = "Home" })

16voto

Subhash Rao Points 71

Utilisez :

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

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

N'oubliez pas non plus d'utiliser null o new{} en tant que 5ème paramètre parce que passer null o new {} tout en créant un lien d'action ne surchargera pas la méthode pour (text,action,controller,route data) ou son (text,action,controller,route data,html attribute) utilisez donc la bonne méthode

11voto

Sreejith Points 11

Dans MVC2 donner area="root" a fonctionné pour moi comme ci-dessous

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

4voto

Anthony Hart Points 21

Voici la solution que j'ai trouvée pour permettre à un utilisateur de se connecter aux systèmes d'authentification préétablis.

Chacune de mes zones possède une version du fichier _LoginPartial.cshtml.

Je pourrais probablement faire en sorte que l'application utilise une seule version du fichier, mais je n'ai cessé de rencontrer des erreurs lorsque j'ai essayé d'utiliser un seul login partiel.

Il ne s'agit que d'une légère modification du loginpartial généré à l'origine, mais il semble bien fonctionner lorsqu'il est utilisé dans des zones spécifiques.

Voici le code qui est utilisé dans chacun d'entre 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>
}

0 votes

La définition explicite de la htmlAttributes: a très bien fonctionné pour l'utilisation de plusieurs paramètres.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X