使用母版asp.net时如何在文件夹中查找页面

Tro*_*hel 3 asp.net web-applications visual-studio-2010

当我的页面位于解决方案的主要级别时,菜单项href可以找到内容页面.当我将内容页面放在子文件夹中并分别更改href路径时,它找不到该页面.这似乎只是MasterPages的一个问题.我在这里错过了什么吗?我在'/'应用程序中收到错误服务器错误找不到资源HTTP 404.请求的URL:/Pages/Pages/Items.aspx

为什么它会在我的路径前添加另一个/ Pages?

Project
  +Images
  -Pages
      Items.aspx
      Library.aspx
  +Styles
  Default.aspx
  Site.Master
Run Code Online (Sandbox Code Playgroud)

母版

  <div id="tabdiv" class="tabdiv">
     <ul id="tabmenu" class="tabmenu">

         <li><a href="Pages/Items.aspx" class="separator">Items</a></li>
         <li><a href="Pages/Library.aspx">Library</a></li>

     </ul>
  </div>
  <div id="main" class="main">
       <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
       </asp:ContentPlaceHolder>
  </div>
Run Code Online (Sandbox Code Playgroud)

Bra*_*tie 5

简短回答,使用绝对路径(到站点的根目录)或使用~/将所有页面关联回站点根目录(后者在服务器位置更改之间更安全,更健壮).

推理?

  • 当你在root(/)链接中Pages/Items.aspx结合这两个:/Pages/Items.aspx.
  • 当你已经在Pages/你现在重新引用同一目录时Pages/Items.aspx,你得到一个组合值/Pages/Pages/Items.aspx.

如果要链接到项目,请查看Control.ResolveUrl方法.例如

<a href="<%= Page.ResolveUrl("~/Pages/Items.aspx") %>" class="separator">Items</a>
Run Code Online (Sandbox Code Playgroud)

现在,无论链接嵌入到哪个页面,它仍然会提供该资源的绝对路径(在本例中为Items.aspx).