【问题标题】:use of tilde (~) in asp.net path在 asp.net 路径中使用波浪号 (~)
【发布时间】:2011-03-05 21:19:14
【问题描述】:

我正在开发一个 asp.net 应用程序,以下链接在 IE 中有效,但在 FF 中无效。

<a href="~/BusinessOrderInfo/page.aspx" >

波浪号不是只能在 asp.net 服务器控件中使用的东西吗?哪里会被实际路径替代?

是否可以在锚标记中使用波浪号?如果有是什么意思?

当我处于根目录时,链接有效

www.myserver.com/default.aspx, click the link, ok!

www.myserver.com/otherpart/default.aspx, click the link, not ok!

ASP.NET生成的链接是:

www.myserver.com/otherpart/~BusinessOrderInfo/page.aspx

这是设计的吗?

【问题讨论】:

标签: c# asp.net


【解决方案1】:

你是对的,它只适用于服务器控件。您有以下基本选项:

更改为HyperLink 以作为Web Control 运行:

<asp:HyperLink NavigateUrl="~/BusinessOrderInfo/page.aspx" Text="Whatever" runat="server" />

或者,在服务器端以HTML Control 运行锚点:

<a href="~/BusinessOrderInfo/page.aspx" runat="server" >

或者,使用Page.ResolveUrl

<a href="<%= Page.ResolveUrl("~/BusinessOrderInfo/page.aspx") %>">...</a>

【讨论】:

  • 为什么不能直接使用
  • @JamieKitson 如果你这样做,它只会在路径相对于用户在网站上的当前位置正确的情况下才有效。您可能还想知道为什么不直接使用&lt;a href="/BusinessOrderInfo/page.aspx" &gt; 作为绝对路径。也不要这样做,因为它只有在您将网络应用程序部署到域的根目录(例如 www.example.com)时才会起作用。但是,如果您部署到子目录(例如 www.example.com/MyAppRoot),它将不起作用。始终最好确保您使用 app-root-relative URL(带有 ~ 的 URL)以确保您的网络应用是可移植的。
  • 我认为您必须将 runat="server" 放入 head-tag 中才能解析链接标签。
  • 添加 runat="server" 可能会导致某些标签的副作用。最值得注意的是脚本标签。
  • 在后面的代码中,哪个是正确的,Response.Redirect("webform2.aspx") 还是Response.Redirect("~/webform2.aspx")
【解决方案2】:

波浪号指的是应用程序根目录,将在 NavigateUrl 等控件属性中正确翻译。

我的理解是,如果你在plain-HTML标签中使用它,它不会被ASP.Net翻译。

【讨论】:

  • 这基本是真的。如果你使用像 这样的纯 HTML 标签并给它一个 runat="server" 你可以成功地使用虚拟路径来引用你的内容。
【解决方案3】:

HTML 控件可以通过添加 runat="server" 属性变成服务器控件。

<a href="~/BusinessOrderInfo/page.aspx" runat="server">

【讨论】:

  • 请记住 - 这样做的缺点是会损害性能,因为当需要生成页面时,图像标签会转换为服务器控件,而实际上并没有必要这样做。跨度>
  • 如果容器标签中包含 runat="server" 这似乎也有效,至少当希望我的网站图标位于根路径中时,它与 可以从使用我的母版页的任何路径访问
【解决方案4】:

如果您删除波浪号并仅使用正斜杠,您将获得相同的结果,即指向当前域上的根文件夹:

<a href="/BusinessOrderInfo/page.aspx" >

【讨论】:

    【解决方案5】:

    这个函数也可以用来解析非服务器元素的路径

    VirtualPathUtility.ToAbsolute($"~/App_Themes/Default/Icons/myimage.gif")
    

    【讨论】:

      猜你喜欢
      • 2011-03-03
      • 1970-01-01
      • 1970-01-01
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      • 2011-03-30
      • 2010-12-13
      • 2017-02-28
      相关资源
      最近更新 更多