Меню в _Layout.cshtml - отображать элементы в зависимости от логики контекста - PullRequest
0 голосов
/ 08 ноября 2018

Это проект MVC .DotNet Core. В _Layout.cshtml я хотел бы отображать элементы меню в зависимости от логики контекста. Пользователь должен сначала выбрать HouseGroup в списке, чтобы страница House была доступна.

<nav class="navbar navbar-inverse navbar-fixed-top">
    <div class="container">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
        </div>
        <div class="navbar-collapse collapse">
            <ul class="nav navbar-nav">
            <li><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li>
            <li><a asp-area="" asp-controller="Home" asp-action="About">About</a></li>
            <li><a asp-area="" asp-controller="Home" asp-action="Contact">Contact</a></li>
           <li><a asp-area="" asp-controller="HouseGroups" asp-action="Index">HouseGroup</a></li>
            <li><a asp-area="" asp-controller="Houses" asp-action="Index">House</a></li>

            </ul>
        </div>
    </div>
</nav>

Это означает, что изначально меню HouseGroup не отображается и становится видимым, когда выбран дом на странице Дом. Чтобы сохранить в памяти активную HouseGroup, я храню HouseGroupID в объекте NavigationContext, который я зарегистрировал в Startup.cs как Singleton:

services.AddSingleton<NavigationContext>();

Я не понимаю, как правильно получить, что список меню в _Layout.cshtml зависит от бизнес-логики. Как я мог связать это с контроллером, не испытывая проблем с другими представлениями, которые отображаются в @RenderBody (), такими как представления House и HouseGroup (Views / Houses / Index.cshtml, Views / Houses / Create.cshtml, Views / HouseGroups) /Index.cshtml, Views / HouseGroups / Edit.cshtml, ...).

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 25 декабря 2018

Я внедрил систему авторизации на основе этого урока: https://docs.microsoft.com/en-us/aspnet/core/security/authorization/secure-data?view=aspnetcore-2.1. На любой странице .cshtml мы можем добавить ссылку с помощью @using и добавить объекты с помощью @inject. Будьте внимательны, чтобы защитить каждое действие в контроллере, чтобы пользователь не выполнял действия, отправляя поддельные объекты на сервер.

Для моего случая я переместил основную часть NavigationContext на слой Session в соответствии с этим уроком https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-2.1#session-state.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...