如何在特定视图中隐藏_Layout.cshtml菜单?

时间:2013-12-21 22:21:39

标签: c# html asp.net-mvc

在我的MVC 4项目中,我有2个菜单,一个顶部固定菜单和一个侧面菜单。即使用户未登录,顶部菜单也始终可见。但是侧边菜单仅在用户登录时可见。但是如果用户具有管理员角色,则他可以访问“创建用户”视图,并且我希望侧视菜单在该视图中不可见。我怎么能这样做?

这是布局视图中的侧边菜单部分:

        @if (Request.IsAuthenticated)
        {
            <div class="row">
                <div class="col-md-3">
                    <p class="lead">Comparações</p>
                    <div class="list-group">
                        <a href="#" class="list-group-item">Item 1</a>
                        <a href="#" class="list-group-item">Item 2</a>
                    </div>
                </div>
             </div>
         }

3 个答案:

答案 0 :(得分:1)

我用过css - 你可以把它变成&#34; HideMenu.cshtml&#34;并在任何您不想看菜单的cshtml文件中拨打@RenderPage("HideMenu.cshtml")

<style>
    body {
        padding-top : 0px;
    }
    .navbar {
        display: none;
    }
</style>

在这个css中,&#34; navbar&#34;是我想隐藏的菜单项的类。

使用浏览器中的F12查找要隐藏的元素的类名。

答案 1 :(得分:0)

我使用ViewBag从控制器设置一个标志。此标志确定是否执行某些操作,但请确保缺失值也​​有效,并指示默认操作。在这种情况下,只有受布局附加部分影响的操作可以自由地将ViewBag项设置为特定值。

例如,我在布局中有一个登录表单。但显然,当用户访问注册页面时,不应该呈现登录。因此,有一个默认为False的HideSignInForm(并且缺少等于False)。在_Layout.cshtml中,这段代码涵盖了这一点:

bool hideSignInForm = false;
if (ViewBag.HideSignInForm != null)
{
    hideSignInForm = (bool)ViewBag.HideSignInForm;
}

稍后在_Layout.cshtml中,我通常使用该标志:

if (!hideSignInForm)
{
    <div id="signInUser">
        ...
    </div>
}

答案 2 :(得分:0)

尝试:

@if (Request.IsAuthenticated && !HttpContext.Current.User.IsInRole("Admin"))
    {
        <div class="row">
            <div class="col-md-3">
                <p class="lead">Comparações</p>
                <div class="list-group">
                    <a href="#" class="list-group-item">Item 1</a>
                    <a href="#" class="list-group-item">Item 2</a>
                </div>
            </div>
         </div>
     }
相关问题