ASP.Net Site.Master路由链接路径异常问题咨询
解决ASP.NET Site.Master中路由链接路径异常的问题
你遇到的是ASP.NET Web Forms里典型的路径解析问题,我来帮你拆解原因和解决办法:
问题根源
你代码里下拉菜单(dropdown)中的<a>标签没有添加runat="server"属性,导致ASP.NET无法识别并处理~/这个根路径标记——浏览器会把~/当成普通路径字符,所以出现了http://localhost/~/Admin/ManageType这种错误路径;而去掉~/后,路径变成了相对当前页面的相对路径,当你已经处于Admin目录下的页面时,再次点击就会叠加路径,变成Admin/Admin/ManageType。
解决方案
只需要给下拉菜单里的<a>标签加上runat="server",同时保留~/前缀即可。这样ASP.NET会在页面渲染时自动把~/替换为网站的根路径,不管当前页面在哪个目录下,都会生成正确的绝对路径。
修改后的代码如下:
<ul class="nav navbar-nav"> <li><a runat="server" href="~/"></a></li> <li><a runat="server" href="~/About">About</a></li> <li class="dropdown"> <a href="#" data-toggle="dropdown" class="dropdown-toggle">Manage <b class="caret"></b></a> <ul class="dropdown-menu"> <li><a runat="server" href="~/Admin/ManageType">Recipe</a></li> <li class="divider"></li> <li><a runat="server" href="~/Admin/ManageType">Type</a></li> </ul> </li> <li><a runat="server" href="~/Recipe/Recipe">Recipe</a></li> </ul>
补充方案
如果因为某些原因不想给<a>标签加runat="server",也可以用ResolveUrl方法手动解析根路径,写法如下:
<li><a href='<%= ResolveUrl("~/Admin/ManageType") %>'>Recipe</a></li>
这个方法同样会把~/转换为正确的根路径,避免相对路径的叠加问题。
内容的提问来源于stack exchange,提问作者Theo Frank
相关产品推荐
相关产品推荐

