C# asp.net mvc中母版页的部分有条件渲染

C# asp.net mvc中母版页的部分有条件渲染,c#,asp.net-mvc,master-pages,renderpartial,C#,Asp.net Mvc,Master Pages,Renderpartial,您好,我在asp.net mvc web应用程序的母版页上定义了以下菜单 <%Html.RenderPartial("AdminMenu"); %> <%Html.RenderPartial("ApproverMenu"); %> <%Html.RenderPartial("EditorMenu"); %> 但是,我只想根据登录用户角色显示右菜单。我如何做到这一点 我开始认为我的策略是错误的,那么有没有更好的方法来实现同样的目标呢?举个简单的例子,你可以

您好,我在asp.net mvc web应用程序的母版页上定义了以下菜单

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

但是,我只想根据登录用户角色显示右菜单。我如何做到这一点


我开始认为我的策略是错误的,那么有没有更好的方法来实现同样的目标呢?

举个简单的例子,你可以这样做:

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

扩展方法是这里的发展方向。与@Joseph的
renderpartialivinrole
相比,您可以使用
条件renderpartial
方法:

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

是的,我希望有更优雅一点的东西!但我同意这是一个解决办法。@Rippo是的,我理解。实际上,您可以尝试一种扩展方法。我将给出一个例子。ConditionalRenderPartial是mvc v2方法吗?@Rippo否,我提供了下面的实现,但我忘记了从
RenderPartialIfInRole
重命名它,这让人困惑。现在修好了。
<% 
    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);
}
<% 
    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);
}