sur mon site Web, j'ai une section (une barre latérale flottante) que je veux rendre uniquement pour un sous-ensemble d'utilisateurs (administrateurs). J'espère que je peux mettre la logique dans la mise en page principale pour déterminer si la section doit être affichée ou non, mais cela provoque une erreur sur la page si la section n'est pas rendue.
exemple de code - layout.cshtml. .. p> exemple de code - mypage.cshtml ... p> Est-ce que quelqu'un sait que quelqu'un sait que cela fonctionne Sans avoir à mettre la logique dans toutes les pages de l'enfant? p> comme une note, IssectionDefinefin ("Adminsidebar") ne fonctionne que dans le fichier de mise en page. Cela ne fonctionne pas dans la page pour tester si la section est disponible ou non. P> p>
3 Réponses :
Utiliser une section pour quelque chose qui est conditionnel basé sur le niveau d'autorisation des utilisateurs se sent un peu sale pour moi. J'utiliserais RenderPartial (utilisateur) et mettre la logique dans la partie partielle.
@if(user.IsAdmin) { ..code.. }
Dans mon fichier _layout.cshtml J'ai fait quelque chose comme ceci:
@if(user.IsAdmin) { @Html.Partial("SideBar") }
Merci, mais malheureusement, chaque page peut avoir des éléments différents dans la barre latérale (il s'agit essentiellement d'un ensemble d'outils contextuels) afin que cela ne fonctionnerait pas.
Pour quiconque en regardant cette réponse, il devrait être @if (utilisateur.isadmin) {html.renderpartiale ("latéralbar"); } code>
Je ne sais pas si cela ne abuse pas du cadre, mais si vous êtes vraiment enclin à y aller de cette façon, vous pouvez essayer ce qui suit:
@{ if(user.IsAdmin) { @RenderSection("AdminSidebar", false) } else { RenderSection("AdminSidebar", false).WriteTo(TextWriter.Null); } }
Astucieux. Je l'aime bien. Je souhaite que le cadre MVC vient d'ignorer des sections qui n'étaient pas définies au lieu de jeter des erreurs, mais cela me permet de définir la section de la façon dont je veux.
@Brian Mais pourquoi ne pas utiliser le rendupartial comme suggéré par Itamatt, qui est beaucoup plus propre?
Parce que je devrais alors créer une partielle pour chaque page que je souhaite ajouter une barre latérale également (c'est contextuel basé sur la page).
Vous devrez peut-être envelopper cette section avec IssectionDefinefin ("Adminsidebar") pour rendre compte des pages qui ne définissent pas la section.