_Layout.cshtml中的菜单栏-根据上下文逻辑显示元素

时间:2018-11-08 02:22:31

标签: asp.net-mvc

这是一个MVC .DotNet Core项目。在_Layout.cshtml中,我想根据上下文逻辑显示菜单元素。用户必须首先在列表中选择一个房屋组才能使房屋页面可用。

<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不可见,并且在House页面中选择House时,该菜单将变为可见。为了将活动的HouseGroup保留在内存中,我将HouseGroupID存储在我在Startup.cs中注册为Singleton的NavigationContext对象中。

services.AddSingleton<NavigationContext>();

我看不到如何正确获取_Layout.cshtml中的菜单列表取决于业务逻辑。我如何将其与Controller链接而不会遇到@RenderBody()渲染的其他视图(例如,房屋和房屋组视图(Views / Houses / Index.cshtml,Views / Houses / Create.cshtml,Views / HouseGroups) /Index.cshtml、Views/HouseGroups/Edit.cshtml,...)。

谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我基于本教程https://docs.microsoft.com/en-us/aspnet/core/security/authorization/secure-data?view=aspnetcore-2.1实现了授权系统。在任何.cshtml页面中,我们都可以使用@using添加引用,并使用@inject注入对象。还要保护控制器中的每个动作,以免用户通过向服务器发送虚假对象来执行动作。

对于我来说,我根据本教程https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-2.1#session-state将NavigationContext的主要部分移到了Session层。