2009-11-17 5 views
3

Привет У меня есть следующие меню, определенные на моем MasterPage в ASP.NET MVC веб-приложенияRenderpartial условно на MasterPage в ASP.NET MVC

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

Однако я хочу, чтобы отображать только правильное меню в зависимости от вошедшего в роли пользователей. Как мне это достичь?

Я начинаю думать, что моя стратегия неверна, так есть ли лучший способ достижения одной и той же вещи?

ответ

8

В качестве простого примера, вы можете сделать это:

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

или, возможно, ваши пользователи могут быть в несколько ролей, в этом случае что-то вроде этой логики может быть более подходящим:

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

Или более элегантный подход для последних с использованием метода расширения:

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

с

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

Да, я надеялся на что-то более элегантное! Но я согласен, что это работа. – Rippo

+0

Спасибо за ответ, хотя! – Rippo

+1

@ Rippo да, я понимаю. Фактически, вы можете попробовать метод расширения. Я приведу пример. – Joseph

2

Методы расширения - это путь сюда. В более общем смысле, чем @RenderPartialIfInRole Иосифа, вы могли бы использовать 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

Is ConditionalRenderPartial - метод mvc v2? – Rippo

+0

@Rippo no, я предоставляю реализацию ниже, но я забыл переименовать его из «RenderPartialIfInRole», что сбивало с толку. Исправлено. –

+0

@Gabe, ах я так и думал! Благодарим за редактирование – Rippo

Смежные вопросы