Подтвердить что ты не робот

Как сделать необязательный рендеринг раздела в ASP.Net MVC 3?

На моем веб-сайте у меня есть раздел (плавающая боковая панель), который я хочу отображать только для подмножества пользователей (админов). Я надеюсь, что я могу поместить логику в макет мастера, чтобы определить, должен ли раздел отображаться или нет, но который вызывает ошибку на странице, если раздел не отображается.

Пример кода - Layout.cshtml...

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

Пример кода - MyPage.cshtml...

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

Кто-нибудь знает, как заставить это работать без необходимости вводить логику на всех дочерних страницах?

Как примечание, IsSectionDefined ( "AdminSidebar" ) работает только в файле макета. Он не работает на странице, чтобы проверить, доступен ли раздел или нет.

4b9b3361

Ответ 1

Я не знаю, не злоупотребляет ли это фреймворком, но если вы действительно склонны идти таким путем, вы можете попробовать следующее:

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

Ответ 2

В моем файле _Layout.cshtml я сделал что-то вроде этого:

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

чтобы избежать того, чтобы все дочерние страницы имели дело с необязательным разделом по существу таким же образом. Когда я впервые попробовал опциональную секцию, я обнаружил, что повторяю себя на дочерних страницах, по крайней мере, в моей реализации.

Где я использовал вызов @RenderSection для необязательных разделов, он обычно должен был предоставлять информацию, относящуюся к странице.

Ответ 3

Использование раздела для чего-то условного, основанного на уровне разрешений пользователей, для меня немного грязно. Я бы использовал RenderPartial (пользователь) и поместил логику в частичное.

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