ASP.NET MVC:为控制器下所有操作的头部导航添加样式类
解决ASP.NET MVC导航栏控制器下所有路径高亮问题
方案一:后端Razor判断(推荐)
直接在视图中通过ASP.NET MVC的路由上下文获取当前控制器名称,动态给对应导航项添加高亮类,这种方式不受前端路径变化影响,稳定性更强。
修改后的导航代码:
<nav class="navbar navbar-expand-md navbar-light bg-light header-box-shadow"> <div class="collapse navbar-collapse" id="appNavigation"> <div class="navbar-nav"> <a class="nav-link @(ViewContext.RouteData.Values["controller"].ToString() == "Home" ? "text-white bg-primary" : "")" asp-action="Index" asp-controller="Home">Home</a> <a class="nav-link @(ViewContext.RouteData.Values["controller"].ToString() == "Entry" ? "text-white bg-primary" : "")" asp-action="Index" asp-controller="Entry">Manual Entry</a> </div> </div> </nav>
逻辑说明:利用Razor三元表达式,判断当前请求的控制器是否为Home或Entry,匹配时自动添加高亮类。无论访问该控制器下的哪个Action(比如Home/GetJobs、Entry/Review),对应导航项都会保持高亮状态。
方案二:前端jQuery改进
如果不想改动后端逻辑,可修改JS判断逻辑,不再精确匹配导航项的href,而是通过路径前缀匹配控制器范围:
修改后的JS代码:
$(function() { const currentPath = location.pathname; // 根路径或Home控制器下的所有路径都高亮Home导航 if (currentPath === "/" || currentPath.startsWith("/Home/")) { $("nav a.nav-link[asp-controller='Home']").addClass("text-white bg-primary"); } // Entry控制器下的所有路径都高亮Entry导航 if (currentPath.startsWith("/Entry/")) { $("nav a.nav-link[asp-controller='Entry']").addClass("text-white bg-primary"); } });
逻辑说明:通过startsWith判断当前路径是否以目标控制器的路径前缀开头,同时将根路径/归为Home导航的高亮范围。使用asp-controller属性选择器定位导航项,比依赖href更可靠,不会因路由配置变化失效。
内容的提问来源于stack exchange,提问作者Zach Hartt
相关产品推荐
相关产品推荐

