【问题标题】:Tilde (~) resolving to site root rather than application root in asp.net波浪号 (~) 在 asp.net 中解析为站点根目录而不是应用程序根目录
【发布时间】:2014-04-10 00:50:16
【问题描述】:

我有一个 ASP.Net Web Forms 站点,我正在尝试将另一个 ASP.Net Web Forms 应用程序添加到子目录中。 ASP 应用程序正确发布并且从子目录运行正常,但是,所有链接都解析为http://website.com/destination 而不是http://website.com/webapp/destination

例子:

<a id="loginLink" runat="server" href="~/Account/Login.aspx">

解析为http://website.com/Account/Login.aspx 而不是http://website.com/webapp/Account/Login.aspx。 CSS、脚本和图像等资源也是如此。

我查看了很多关于 SO 的类似问题的帖子,但似乎没有一个与我遇到的问题完全相同。很多答案似乎都涉及从代码重定向,这适用于链接,但我不确定这将如何解决资源问题。

【问题讨论】:

  • 出于几个不同的原因,我希望避免这样做。其中最重要的是更改应用程序中的每个链接和资源引用。但另一个问题是母版页是如何工作的? ../ 是否与主模板或它们所在的页面相关?
  • 好的,您是否已将虚拟目录“webapp”转换为 IIS 中的应用程序?
  • 如果不是 ~/ 将解析到下一个可用的根目录(在您的情况下是您的网站)。而且,请记住,您只能将 ~ 与服务器控件一起使用,因为 ASP.Net 在服务器端解析实际路径。除非您添加带有 runat="server" 的链接,否则它不适用于您的 CSS 和脚本。例如。 干杯!
  • 是的,它在 IIS 中配置为 webapp,并且所有内容都设置为 runat server。这就是促使这篇文章的原因,我已经阅读了我能找到的关于这个主题的所有内容,但我无法弄清楚问题是什么。
  • 关于该问题的任何更新?

标签: c# asp.net .net webforms


【解决方案1】:

如果使用 / 它来自根路径

如果使用 ../ 则转到父路径

如果使用 ~/ 它是 asp.net 仅支持 runat="server" 属性。 ,它来自应用根路径。

例如。

   <asp:HyperLink runat="server" NavigateUrl="~/abc.aspx" ID="tests">test</asp:HyperLink> 

相同
<a href='<%=Page.ResolveUrl("~/abc.aspx") %>' >test</a>

【讨论】:

    猜你喜欢
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    相关资源
    最近更新 更多