在我的网站上,我有一个部分(浮动侧边栏),我只想为一组用户(管理员)渲染。我希望我可以将逻辑放在主布局中,以确定是否应显示该部分,但如果未呈现该部分,则会在页面上导致错误。
示例代码 - Layout.cshtml ...
... code ...
@if(user.IsAdmin) {
@RenderSection("AdminSidebar", false)
}
示例代码 - MyPage.cshtml ...
@section AdminSidebar {
... code ...
}
是否有人知道如何在不将逻辑放在所有子页面的情况下使其工作?
作为注释,IsSectionDefined(“AdminSidebar”)仅适用于布局文件。它在页面中不起作用来测试该部分是否可用。
答案 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..
}