ASP.NET WebForms路径异常:无法用..退出顶级目录的解决问询
解决ASP.NET WebForms中AdminLTE侧边栏菜单路径“Cannot use a leading .. to exit above the top directory”异常
我来帮你搞定这个问题!这个错误本质是带runat="server"的<a>标签在解析路径时的规则和普通HTML标签不一样,你尝试的几种写法要么不符合WebForms的路径解析逻辑,要么存在语法错误,咱们一步步来解决:
正确写法(两种可行方案)
使用
~根路径标记(推荐)
你之前的第4种写法少了一个开头引号,这是语法错误,修正后的正确写法如下:<li> <a runat="server" href="~/Track/Shipment.aspx"> <i class="fa fa-th"></i><span>Shipment</span> </a> </li>这里的
~会被ASP.NET自动解析为网站的根目录,不管母版页或子页面放在哪个层级,都能精准定位到Track文件夹下的Shipment.aspx,是WebForms里最稳妥的路径写法。使用相对母版页的路径
如果你的母版页直接放在网站根目录下(比如MasterPage.master在根目录),也可以直接写相对路径:<li> <a runat="server" href="Track/Shipment.aspx"> <i class="fa fa-th"></i><span>Shipment</span> </a> </li>
为什么你之前的写法会报错?
- 写法1(
../../Shipment.aspx):带runat="server"的标签里用../试图跳出根目录,ASP.NET有路径安全限制,不允许这种超出网站根目录的操作,所以直接抛出异常。 - 写法2(
../Track/Shipment.aspx):如果母版页在根目录,这个路径相当于往回跳一级再找Track,根本不存在对应的目录,自然无法定位页面。 - 写法3(
~/../Shipment.aspx):~已经代表根目录了,再加../就是试图跳出根目录,同样触发了ASP.NET的路径安全拦截。 - 写法4:存在语法错误,
href=~/Track/Shipment.aspx"少了开头的引号,ASP.NET无法正确解析这个路径。
额外提示
如果后续你在子目录的页面中使用这个母版页,~依然能正确解析到根目录,所以用~/开头的路径完全不用考虑页面所在的层级,通用性极强。
内容的提问来源于stack exchange,提问作者Ahmed Abd El-Hameed
相关产品推荐
相关产品推荐

