【问题标题】:Menubar in _Layout.cshtml - Display elements depending on context logic_Layout.cshtml 中的菜单栏 - 根据上下文逻辑显示元素
【发布时间】:2019-04-11 13:02:39
【问题描述】:

这是一个 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>

It means that initially, the menu HouseGroup is not visible and becomes visible when a House in the page House is selected.为了记住活动的 HouseGroup,我将 HouseGroupID 存储在我在 Startup.cs 中注册为 Singleton 的 NavigationContext 对象中:

services.AddSingleton&lt;NavigationContext&gt;();

我不明白如何正确获取 _Layout.cshtml 中的菜单列表取决于业务逻辑。我如何可以将它与控制器链接,而不会遇到由@RenderBody() 呈现的其他视图,例如 House 和 HouseGroup 视图(Views/Houses/Index.cshtml、Views/Houses/Create.cshtml、Views/HouseGroups /Index.cshtml, Views/HouseGroups/Edit.cshtml, ...)。

感谢您的帮助。

【问题讨论】:

  • 表示一开始菜单House是不可见的,当页面HouseGroup中有一个HouseGroup时才可见被选中。

标签: asp.net-mvc


【解决方案1】:

我根据本教程实现了一个授权系统: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 层。

【讨论】:

    猜你喜欢
    • 2014-12-19
    • 2013-10-20
    • 2018-03-07
    • 1970-01-01
    • 2023-04-04
    • 2021-02-24
    • 2018-07-09
    • 1970-01-01
    • 2021-08-31
    相关资源
    最近更新 更多