You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET页面点击导航链接时URL路径重复致404错误求助

解决ASP.NET Web Forms母版页下拉菜单路径重复导致404的问题

问题重现

项目结构:

  • Views/Home/Index.aspx(引用SystemsMenu.Master母版页)
  • Views/Home/MEFS/ 下存放多个aspx页面(同样引用SystemsMenu.Master)

母版页中MEFS下拉菜单的静态链接代码:

<li class="nav-item dropdown">
 <a class="nav-link dropdown-toggle" href="#" id="MEFSDropdown" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside">MEFS</a>
  <ul class="dropdown-menu" aria-labelledby="navbarDropdown">
     <li><a href="MEFS/AboutMEFS.aspx">About</a></li>
     <li><a href="MEFS/Documentation.aspx">Documentation</a></li>
     <li><a href="MEFS/MEFSAccess.aspx">Access to MEFS</a></li>
     <li><a href="MEFS/FAQMEFS.aspx">FAQ – Frequently asked questions</a></li>
  </ul>
</li>
  • 首次从Index.aspx点击Documentation链接,URL为/Views/Home/MEFS/Documentation.aspx,加载正常
  • 在Documentation.aspx页面再次点击FAQMEFS链接,URL变为/Views/Home/MEFS/MEFS/FAQMEFS.aspx,触发404错误

问题原因

静态<a>标签的相对路径是基于当前页面的URL解析的:

  • 在Index.aspx(路径/Views/Home/)下,MEFS/FAQMEFS.aspx会解析为/Views/Home/MEFS/FAQMEFS.aspx,正确
  • 在MEFS子页面(路径/Views/Home/MEFS/)下,MEFS/FAQMEFS.aspx会解析为/Views/Home/MEFS/MEFS/FAQMEFS.aspx,路径重复导致找不到资源

解决方案

1. 使用ASP.NET根路径运算符~(推荐)

ASP.NET的~运算符会自动映射到应用程序的根目录,无论当前页面处于哪个层级,都能正确生成路径。修改链接为:

<li class="nav-item dropdown">
 <a class="nav-link dropdown-toggle" href="#" id="MEFSDropdown" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside">MEFS</a>
  <ul class="dropdown-menu" aria-labelledby="navbarDropdown">
     <li><a href="~/Views/Home/MEFS/AboutMEFS.aspx">About</a></li>
     <li><a href="~/Views/Home/MEFS/Documentation.aspx">Documentation</a></li>
     <li><a href="~/Views/Home/MEFS/MEFSAccess.aspx">Access to MEFS</a></li>
     <li><a href="~/Views/Home/MEFS/FAQMEFS.aspx">FAQ – Frequently asked questions</a></li>
  </ul>
</li>

注意:确保页面是ASP.NET页面(.aspx),服务器会自动解析~路径。

2. 使用ASP.NET HyperLink服务器控件

用<asp:HyperLink>代替静态<a>标签,ASP.NET会自动处理路径解析,同时保持Bootstrap样式:

<li class="nav-item dropdown">
 <a class="nav-link dropdown-toggle" href="#" id="MEFSDropdown" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside">MEFS</a>
  <ul class="dropdown-menu" aria-labelledby="navbarDropdown">
     <li><asp:HyperLink runat="server" NavigateUrl="~/Views/Home/MEFS/AboutMEFS.aspx" Text="About" CssClass="dropdown-item" /></li>
     <li><asp:HyperLink runat="server" NavigateUrl="~/Views/Home/MEFS/Documentation.aspx" Text="Documentation" CssClass="dropdown-item" /></li>
     <li><asp:HyperLink runat="server" NavigateUrl="~/Views/Home/MEFS/MEFSAccess.aspx" Text="Access to MEFS" CssClass="dropdown-item" /></li>
     <li><asp:HyperLink runat="server" NavigateUrl="~/Views/Home/MEFS/FAQMEFS.aspx" Text="FAQ – Frequently asked questions" CssClass="dropdown-item" /></li>
  </ul>
</li>

3. 使用绝对路径(需注意虚拟目录场景)

如果应用部署在网站根目录下,可直接使用从根开始的绝对路径:

<li class="nav-item dropdown">
 <a class="nav-link dropdown-toggle" href="#" id="MEFSDropdown" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside">MEFS</a>
  <ul class="dropdown-menu" aria-labelledby="navbarDropdown">
     <li><a href="/Views/Home/MEFS/AboutMEFS.aspx">About</a></li>
     <li><a href="/Views/Home/MEFS/Documentation.aspx">Documentation</a></li>
     <li><a href="/Views/Home/MEFS/MEFSAccess.aspx">Access to MEFS</a></li>
     <li><a href="/Views/Home/MEFS/FAQMEFS.aspx">FAQ – Frequently asked questions</a></li>
  </ul>
</li>

⚠️ 注意:若应用部署在IIS虚拟目录下(如http://example.com/MyApp/),绝对路径会指向网站根而非应用根,这种场景优先用~路径。

内容的提问来源于stack exchange,提问作者Foxy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 07:30:30