asp.net-mvc - _Layout.cshtml 中的菜单栏 - 根据上下文逻辑显示元素
问题描述
这是一个 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 是不可见的,并且当页面中的 House 被选中时变为可见。为了记住活动的 HouseGroup,我将 HouseGroupID 存储在我在 Startup.cs 中注册为 Singleton 的 NavigationContext 对象中:
services.AddSingleton<NavigationContext>();
我看不到如何正确获取 _Layout.cshtml 中的菜单列表取决于业务逻辑。我如何可以将它与控制器链接,而不会遇到由 @RenderBody() 呈现的其他视图,例如 House 和 HouseGroup 视图(Views/Houses/Index.cshtml、Views/Houses/Create.cshtml、Views/HouseGroups /Index.cshtml,视图/HouseGroups/Edit.cshtml,...)。
感谢您的帮助。
解决方案
我根据本教程实现了一个授权系统:https ://docs.microsoft.com/en-us/aspnet/core/security/authorization/secure-data?view=aspnetcore-2.1 。在任何 .cshtml 页面中,我们可以使用 @using 添加引用并使用 @inject 注入对象。还要小心保护控制器中的每个操作,以避免用户通过向服务器发送虚假对象来执行操作。
对于我的情况,我根据本教程将 NavigationContext 的主要部分移至会话层https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-2.1#会话状态。
推荐阅读
- javascript - 对象作为 React 子级无效。如果您打算渲染一组子项,请改用数组 - 错误 Solidity - React
- php - 如何使用 PHP 解析网页内的图像?
- reactjs - Gatsby 中的 Prismic 插件出现“无效插件选项”错误
- laravel - 如何根据登录用户隐藏按钮?在HTML
- xpath - 为什么带有 XPATH 的 IMPORTXML 除了返回预期结果之外还返回意外的空白行?
- html - CSS未使用引导程序加载
- javascript - 异步/等待在 react-native-component 中调用 api 的搜索函数
- kubernetes - 查询 Kubernetes 中的远程状态存储(交互式查询)
- swift - Xcode 11 使用 Parse 连接到 Amazon Web Service 时出错
- reactjs - 在 React js 的单页滚动投资组合站点中,我可以在哪里放置登录页面?