asp.net-mvc – 以编程方式隐藏全局菜单项的Razor代码?
发布时间:2020-12-16 09:17:15 所属栏目:asp.Net 来源:网络整理
导读:我是一名经验丰富的.NET程序员,但我是这个整个网络编程的新手.我的ASP.NET MVC网站有一个全局布局,其中包含一些内容(页面顶部的菜单链接),我想在控制器代码动态检测到的条件下隐藏这些内容. 我的倾向 – 使用我迄今为止学到的工具的简单方法 – 将布尔的Hide
我是一名经验丰富的.NET程序员,但我是这个整个网络编程的新手.我的ASP.NET MVC网站有一个全局布局,其中包含一些内容(页面顶部的菜单链接),我想在控制器代码动态检测到的条件下隐藏这些内容.
我的倾向 – 使用我迄今为止学到的工具的简单方法 – 将布尔的HideGlobal值推入ViewBag,并将全局标记放在_Layout.cshtml中,我想隐藏在@ if(ViewBag.HideGlobal){}阻止. 我只是想知道这是否是“正确”的方式,或者是否有一些我应该使用的Razor魔法,原因对我来说还不明显? 解决方法
我不喜欢在动作返回的视图之外使用动作的视图模型.在这种情况下使用基本视图模型非常笨重.
我相信使用一个单独的(子)动作更清晰,更明显,该动作包含指定全局菜单应如何显示的逻辑.此操作返回全局菜单视图.从布局页面调用该操作. 或者,您可以为确定菜单状态的整个标题创建操作 – 或者执行if / else以呈现全局菜单的部分视图. 下面的示例封装了标题/全局菜单的需求,并提供了一种更改标题/菜单的未来验证方法,对代码基础结构(基本视图模型)的影响最小. ?/控制器/ LayoutController.cs public class LayoutController : Controller { [ChildActionOnly] public ActionResult Header() { var model = new HeaderViewModel(); model.ShowGlobalMenu = ShowGobalMenu(); return View(model); } } ?/查看/布局/ Header.cshtml @model HeaderViewModel @{ Layout = ""; } <header> <a href="/">Home</a> @if(Model.ShowGlobalMenu) { <ul> <li><a href="#">Link</a></li> <li><a href="#">Link</a></li> <li><a href="#">Link</a></li> <li><a href="#">Link</a></li> </ul> } </header> ?/查看/共享/ _Layout.cshtml <html> <body> @Html.Action("Header","Layout") <p>Stuff</p> </body> </body> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – ASP.NET MVC 3 – ViewModel最佳实践
- asp.net-mvc – Angular ng-include cshtml页面
- asp.net-mvc – ASP.Net MVC Kendo Grid的自定义分页
- asp.net – Response.TrySkipIisCustomErrors不工作
- asp.net-mvc – 动作过滤器异常
- asp.net-mvc-3 – 跨多个控制器操作保持值
- asp.net-mvc-3 – MVC3 – 每次调用两次控制器索引操作
- asp.net-mvc – CultureInfo:ASP.NET / MVC上的Haitian Cr
- asp.net – 如何替换默认的Azure 403错误页面
- asp.net-web-api – 从ASP.NET WebAPI 2中的头和/或查询字符