【问题标题】:Renderpartial conditionally on masterpage in asp.net mvc在 asp.net mvc 的母版页上有条件地渲染部分
【发布时间】:2009-11-17 15:40:19
【问题描述】:

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

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

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

我开始认为我的策略不正确,那么有没有更好的方法来实现同样的目标?

【问题讨论】:

    标签: c# asp.net-mvc master-pages renderpartial


    【解决方案1】:

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

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

    【讨论】:

    • 是的,我希望有一些更优雅的东西!但我同意这是一种解决方法。
    • @Rippo 是的,我明白了。实际上,您可以尝试扩展方法。我举个例子。
    【解决方案2】:

    扩展方法是这里的方法。比@Joseph 的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);
    }
    

    【讨论】:

    • ConditionalRenderPartial 是 mvc v2 方法吗?
    • @Rippo 不,我提供了下面的实现,但我忘记将它从 RenderPartialIfInRole 重命名,这令人困惑。现已修复。
    猜你喜欢
    • 2013-10-11
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    • 2012-06-04
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    相关资源
    最近更新 更多