2009-11-17 7 views
3

Salut je les menus suivants définis sur mon masterpage dans une application web asp.net mvcrenderPartial conditionnellement masterpage dans asp.net mvc

<%Html.RenderPartial("AdminMenu"); %> 
<%Html.RenderPartial("ApproverMenu"); %> 
<%Html.RenderPartial("EditorMenu"); %> 

Cependant, je veux afficher uniquement le menu de droite en fonction de l'utilisateur connecté dans le rôle des utilisateurs. Comment puis-je y parvenir? Je commence à penser que ma stratégie est incorrecte. Y a-t-il une meilleure méthode pour atteindre la même chose?

Répondre

8

Comme un exemple simple, vous pouvez le faire:

<% 
    if (User.IsInRole("AdminRole") 
     Html.RenderPartial("AdminMenu"); 
    else if (User.IsInRole("Approver") 
     Html.RenderPartial("ApproverMenu"); 
    else if (User.IsInRole("Editor") 
     Html.RenderPartial("EditorMenu"); 
%> 

ou peut-être vos utilisateurs peuvent être dans des rôles multiples, dans ce cas, quelque chose comme cette logique pourrait être plus approprié:

<% 
    if (User.IsInRole("AdminRole") 
     Html.RenderPartial("AdminMenu"); 
    if (User.IsInRole("Approver") 
     Html.RenderPartial("ApproverMenu"); 
    if (User.IsInRole("Editor") 
     Html.RenderPartial("EditorMenu"); 
%> 

Ou une approche plus élégante pour ce dernier en utilisant une méthode d'extension:

<% 
    Html.RenderPartialIfInRole("AdminMenu", "AdminRole"); 
    Html.RenderPartialIfInRole("ApproverMenu", "Approver"); 
    Html.RenderPartialIfInRole("EditorMenu", "Editor"); 
%> 

avec

public static void RenderPartialIfInRole 
    (this HtmlHelper html, string control, string role) 
{ 
    if (HttpContext.Current.User.IsInRole(role) 
     html.RenderPartial(control); 
} 
+0

Oui, j'espérais quelque chose d'un peu plus élégant! Mais je suis d'accord c'est un travail autour. – Rippo

+0

Merci pour la réponse si! – Rippo

+1

@Rippo ouais, je comprends. En fait, vous pouvez essayer une méthode d'extension. Je vais donner un exemple. – Joseph

2

Les méthodes d'extensions sont la voie à suivre ici. De manière plus générale que @RenderPartialIfInRole de Joseph, vous pouvez utiliser une méthode ConditionalRenderPartial:

<% 
    Html.ConditionalRenderPartial("AdminMenu", HttpContext.Current.User.IsInRole("AdminRole")); 
    Html.ConditionalRenderPartial("ApproverMenu", HttpContext.Current.User.IsInRole("ApproverRole")); 
    Html.ConditionalRenderPartial("EditorMenu", HttpContext.Current.User.IsInRole("EditorRole")); 
%> 

...

public static void ConditionalRenderPartial 
    (this HtmlHelper html, string control, bool cond) 
{ 
    if (cond) 
     html.RenderPartial(control); 
} 
+0

Est-ce que ConditionalRenderPartial est une méthode mvc v2? – Rippo

+0

@Rippo non, je fournis l'implémentation ci-dessous mais j'ai oublié de la renommer 'RenderPartialIfInRole', ce qui était déroutant. Fixé maintenant –

+0

@ Gabe, ah je le pensais! merci pour l'édition – Rippo

Questions connexes