Razor Pages中_layout.cshtml根据ViewBag.Title添加导航active类失效
问题原因
代码不生效是三个Razor语法使用错误导致的:
- 在HTML属性内写C#三元运算这类复杂表达式时,必须用
@()将整个表达式包裹为Razor代码块。直接写@ViewBag.Title=='Welcome'时,Razor只会解析@ViewBag.Title部分输出对应值,后面的=='Welcome'? ' active' : ''会被当成普通文本直接渲染到class属性里,不会执行判断逻辑。 - 后三个链接使用的
{{ }}双大括号语法是前端MVVM框架、Blazor的模板语法,原生Razor Pages不识别该写法,不会执行其中的判断逻辑。 - 部分位置引号嵌套不规范,容易导致Razor解析时提前截断代码块。
修复方案
将导航栏部分代码替换为如下写法即可:
<div class="navbar-nav ms-auto"> <a data-toggle="tab" asp-page="Index" class="nav-item nav-link @(ViewBag.Title == "Welcome" ? "active" : "")">Home</a> <a data-toggle="tab" asp-page="Products" class="nav-item nav-link @(ViewBag.Title == "Products" ? "active" : "")">Products</a> <a data-toggle="tab" asp-page="NewsBlog" class="nav-item nav-link @(ViewBag.Title == "News & Blog" ? "active" : "")">News & Blog</a> <a data-toggle="tab" asp-page="Contact" class="nav-item nav-link @(ViewData["Title"]?.ToString() == "Contact us" ? "active" : "")">Contact Us</a> </div>
你在Index页写的ViewBag.Title = "Welcome"赋值逻辑没有问题,只需要确保其他页面给ViewBag.Title赋值的字符串和判断条件完全一致(大小写、空格、特殊字符完全匹配)即可。ViewBag.Title和ViewData["Title"]是互通的,不需要混合使用,判断时加?.ToString()是为了避免未给Title赋值时触发空引用报错。
更稳定的实现方式:不需要每个页面手动给ViewBag赋值,直接读取当前路由的页面路径做判断,可避免漏赋值、字符串手误写错导致的匹配失效问题,示例代码:
<div class="navbar-nav ms-auto"> <a data-toggle="tab" asp-page="Index" class="nav-item nav-link @(ViewContext.RouteData.Values["Page"]?.ToString() == "/Index" ? "active" : "")">Home</a> <a data-toggle="tab" asp-page="Products" class="nav-item nav-link @(ViewContext.RouteData.Values["Page"]?.ToString() == "/Products" ? "active" : "")">Products</a> <a data-toggle="tab" asp-page="NewsBlog" class="nav-item nav-link @(ViewContext.RouteData.Values["Page"]?.ToString() == "/NewsBlog" ? "active" : "")">News & Blog</a> <a data-toggle="tab" asp-page="Contact" class="nav-item nav-link @(ViewContext.RouteData.Values["Page"]?.ToString() == "/Contact" ? "active" : "")">Contact Us</a> </div>注意Razor Pages根目录下的页面路径判断需要加
/前缀,比如Pages文件夹下的Index.cshtml对应路由值为/Index,如果页面在Areas或子文件夹下,需要补全对应路径前缀。
内容的提问来源于stack exchange,提问作者Naman Garg
相关产品推荐
相关产品推荐

