2009-11-17 52 views
3

嗨母版我有一个asp.net MVC Web应用程序的RenderPartial有条件在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 2009-11-17 15:43:50

+0

感谢您的回答! – Rippo 2009-11-17 15:44:56

+1

@Rippo是的,我明白了。其实,你可以尝试一种扩展方法。我会举一个例子。 – Joseph 2009-11-17 15:45:33

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

ConditionalRenderPartial是mvc v2方法吗? – Rippo 2009-11-17 16:05:55

+0

@Rippo不,我提供了下面的实现,但是我忘了从'RenderPartialIfInRole'重命名它,这很令人困惑。现在修复。 – 2009-11-17 16:25:35

+0

@加贝啊,我这么认为!感谢编辑 – Rippo 2009-11-17 16:26:24