Как при желании визуализировать раздел в ASP.Net MVC 3? - PullRequest
12 голосов
/ 07 ноября 2011

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

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

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

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

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

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

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

Ответы [ 3 ]

16 голосов
/ 07 ноября 2011

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

@{
    if(user.IsAdmin) {
        @RenderSection("AdminSidebar", false)
    } 
    else {
        RenderSection("AdminSidebar", false).WriteTo(TextWriter.Null);
    }
}
2 голосов
/ 07 ноября 2011

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

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

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

Там, где я использовал вызов @RenderSection для необязательных разделов, он обычно предоставлял материал для конкретной страницы.

0 голосов
/ 07 ноября 2011

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

    @if(user.IsAdmin) {
       ..code..
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...