如何在ASP.Net MVC 3中选择性地呈现一个部分?

时间:2011-11-07 17:49:07

标签: asp.net-mvc asp.net-mvc-3 razor

在我的网站上,我有一个部分(浮动侧边栏),我只想为一组用户(管理员)渲染。我希望我可以将逻辑放在主布局中,以确定是否应显示该部分,但如果未呈现该部分,则会在页面上导致错误。

示例代码 - Layout.cshtml ...

... code ...
@if(user.IsAdmin) {
    @RenderSection("AdminSidebar", false)
}

示例代码 - MyPage.cshtml ...

@section AdminSidebar {
    ... code ...
}

是否有人知道如何在不将逻辑放在所有子页面的情况下使其工作?

作为注释,IsSectionDefined(“AdminSidebar”)仅适用于布局文件。它在页面中不起作用来测试该部分是否可用。

3 个答案:

答案 0 :(得分:16)

我不知道这是不是滥用框架,但如果你真的倾向于这样做,你可以尝试以下方法:

@{
    if(user.IsAdmin) {
        @RenderSection("AdminSidebar", false)
    } 
    else {
        RenderSection("AdminSidebar", false).WriteTo(TextWriter.Null);
    }
}

答案 1 :(得分:2)

在我的_Layout.cshtml文件中,我做了类似这样的事情:

@if(user.IsAdmin)
{
   @Html.Partial("SideBar")
}

避免必须让所有子页面以基本相同的方式处理可选部分。当我第一次尝试可选部分时,我发现我在子页面中重复自己,至少在我的实现中。

我在@RenderSection调用可选部分时,通常会提供特定于页面的内容。

答案 2 :(得分:0)

根据用户权限级别使用某个条件是有条件的,对我来说感觉有点脏。我会使用RenderPartial(用户)并将逻辑放在partial。

    @if(user.IsAdmin) {
       ..code..
     }