C# MVC5中锚点标签未附加到URL Action的问题
先把你贴的代码整理一下方便排查:
<div class="page-tabs"> <ul class="nav nav-tabs"> <li class='@(actionName.ToLower() == "viewamendments" && controllerName.ToLower() == "songsmanagement" ? "active" : "")'> <a href='@Url.Action("ViewAmendments", "SongManagement")' data-container="body" data-toggle="tooltip" title="Old Song">Old Song</a> </li> </ul> </div>
根据你遇到的奇怪问题,我给你几个最可能的排查方向:
控制器名称的单复数/大小写不匹配:你看判断active的条件里,控制器名转小写后是
songsmanagement(带s的复数),但Url.Action里指定的控制器是SongManagement(单数Song)。这俩转小写后一个是songsmanagement,一个是songmanagement,肯定不相等啊!先把这里统一,比如把条件里的songsmanagement改成songmanagement,确保和实际控制器名称一致。确认
actionName和controllerName的取值来源:你得确定这两个变量是从哪里拿到的?比如是不是从ViewContext.RouteData.Values["action"]和ViewContext.RouteData.Values["controller"]取的?如果取值错了(比如拿成了其他参数),那整个判断逻辑就失效了。可以在页面里临时输出这两个变量的值看看:@actionName | @controllerName,直接看渲染出来的内容是不是你预期的。Bootstrap标签页的JS初始化问题:有时候即使
li的active类加上了,但如果没有正确初始化Bootstrap的Tab组件,或者页面里有其他JS冲突,会导致视觉上没显示active状态。可以检查页面里有没有调用$('.nav-tabs a').tab('show')这类初始化代码,或者看看控制台有没有JS报错。浏览器缓存坑:有时候浏览器会缓存旧的页面渲染结果,导致你改了代码但看不到效果。试试按
Ctrl+F5(Windows)或者Cmd+Shift+R(Mac)硬刷新页面,清空缓存后再看。
内容的提问来源于stack exchange,提问作者Rob

