gpt4 book ai didi

asp.net-mvc - 以编程方式隐藏全局菜单项的 Razor 代码?

转载 作者:行者123 更新时间:2023-12-03 03:00:47 25 4
gpt4 key购买 nike

我是一名经验丰富的 .NET 程序员,但我对整个 Web 编程还是个新手。我的 ASP.NET MVC 网站有一个全局布局,其中包括一些我想在 Controller 代码动态检测到的条件下隐藏的内容(页面顶部的菜单链接)。

我的倾向(使用迄今为止我所学到的工具的简单方法)是将 bool HideGlobal 值插入 ViewBag 中,并将全局标记放入我想要隐藏的 _Layout.cshtml 中@if (ViewBag.HideGlobal){} block 的一部分。

我只是想知道这是否是“正确”的方法,或者是否有一些我应该使用的 Razor 魔法,其原因对我来说尚不明显?

最佳答案

我不喜欢在操作返回的 View 之外使用操作的 View 模型。在这种情况下使用基本 View 模型感觉非常笨重。

我相信仅使用包含指定全局菜单应如何显示的逻辑的单独(子)操作会更干净、更明显。此操作返回全局菜单 View 。从布局页面调用该操作。

或者您可以为确定菜单状态的整个 header 创建一个操作,或者执行 if/else 来呈现全局菜单的部分 View 。

下面的示例封装了标题/全局菜单的需求,并提供了一种面向 future 的更改标题/菜单的方法,同时对代码基础结构(基本 View 模型)影响最小。

~/Controllers/LayoutController.cs

public class LayoutController : Controller
{
[ChildActionOnly]
public ActionResult Header()
{
var model = new HeaderViewModel();
model.ShowGlobalMenu = ShowGobalMenu();

return View(model);
}
}

~/Views/Layout/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>

~/Views/Shared/_Layout.cshtml

<html>
<body>
@Html.Action("Header", "Layout")

<p>Stuff</p>
</body>
</body>

关于asp.net-mvc - 以编程方式隐藏全局菜单项的 Razor 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13829648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com