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

Bri*_*ian 12 asp.net-mvc razor asp.net-mvc-3

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

示例代码 - Layout.cshtml ...

... code ...
@if(user.IsAdmin) {
    @RenderSection("AdminSidebar", false)
}
Run Code Online (Sandbox Code Playgroud)

示例代码 - MyPage.cshtml ...

@section AdminSidebar {
    ... code ...
}
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何让它工作而不必将逻辑放在所有子页面中?

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

Joã*_*elo 16

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

@{
    if(user.IsAdmin) {
        @RenderSection("AdminSidebar", false)
    } 
    else {
        RenderSection("AdminSidebar", false).WriteTo(TextWriter.Null);
    }
}
Run Code Online (Sandbox Code Playgroud)