【问题标题】:How to find page in folder when using master page asp.net使用母版页asp.net时如何在文件夹中查找页面
【发布时间】:2013-06-11 13:08:09
【问题描述】:

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

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

解决方案

Project
  +Images
  -Pages
      Items.aspx
      Library.aspx
  +Styles
  Default.aspx
  Site.Master

母版页

  <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>

【问题讨论】:

  • 这就是为什么存在绝对路径 (/Pages/items.aspx) 或使用服务器端映射参考 (~/Pages/Items.aspx) 的原因。
  • href 中删除Pages。母版页是 .aspx 页面的包装,但在提供链接时应使用 .aspx 页面的相对路径。

标签: asp.net visual-studio-2010 web-applications


【解决方案1】:

简短的回答,使用绝对路径(指向您网站的根目录)或使用 ~/ 将所有页面关联回网站根目录(后者在服务器位置更改之间更加安全和可靠)。

推理?

  • 当您位于根 (/) 中时,链接到 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>

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

【讨论】:

  • 这似乎确实有效,但我注意到主解决方案中的其他页面也必须使用 ResolveUrl。当它从文件夹打开页面时,我确实注意到我的母版页中的图像丢失并且图像的链接已损坏。
  • 如果我在路径上使用 ResolveUrl 或 Runat="server",那么 MasterPage 和 ContentPages 中的一切似乎都正常。使用其中一种方法有优点还是缺点?
  • @tszoro - 对于断开的链接,请使用“查看源代码”或浏览器的开发人员工具在浏览器端检查 url。使用此答案中的信息,这应该给出问题的提示。
【解决方案2】:

这样试试

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

【讨论】:

  • 我试过了,但我收到错误 HTTP 404 Requested URL: /~/Pages/Items.aspx
  • 你应该指定 runat="server"
【解决方案3】:

使用上面的thge

<a href="<%= Page.ResolveUrl("~/Pages/Items.aspx") %>" class="separator">Items</a>

【讨论】:

    【解决方案4】:

    href 中删除页面。母版页是 .aspx 页面内容的包装器,但是当您在母版页内提供链接时,您应该使用 .aspx 页面的相对路径(假设您的所有页面都是Pages 文件夹内):

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

    另一种选择是以/ 为前缀,这将使用root-relative link/root link/web-root relative link 呈现链接:

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

    【讨论】:

    • 这似乎一开始可以工作,但是当我多次点击菜单项时,它又找不到页面了。
    【解决方案5】:

    如果您的标签是“a href”,则必须将runat = "server" 与它们各自的id = "lnkItem" 放在一起,然后您应该编写来自服务器端的页面代码:

    lnkItem.HRef = ResolveUrl("~/Pages/Items.aspx"); 
    

    如果您正在调用另一个站点,您可以使用“ResolveUrl”:

    Response.Redirect(ResolveUrl("~/Pages/Items.aspx"));
    

    【讨论】:

      【解决方案6】:

      给出这样的路径。包括您的域名。

      <li><a href="http://example.com/Pages/Items.aspx" class="separator">Items</a></li>
      

      或者 您应该使用 XML 文件或网站路径文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 2011-04-12
        相关资源
        最近更新 更多