12
votes

Comment puis-je éventuellement rendre une section dans ASP.NET MVC 3?

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. .. xxx

exemple de code - mypage.cshtml ... xxx

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?

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.


0 commentaires

3 Réponses :


0
votes

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..
     }


0 commentaires

2
votes

Dans mon fichier _layout.cshtml J'ai fait quelque chose comme ceci:

@if(user.IsAdmin)
{
   @Html.Partial("SideBar")
}


2 commentaires

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



16
votes

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


4 commentaires

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.