在asp.net路径中使用波浪号(〜)


75

我正在使用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

这是设计使然吗?


2
~被称为应用程序根目录运营商BTW如果你正在使用Google它
KyleMit

Answers:


95

您是正确的,它仅在服务器控件中有效。您有以下基本选项:

更改为HyperLink作为Web控件运行:

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

或者,在服务器端将锚作为HTML控件运行

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

或者,使用Page.ResolveUrl

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

为什么不能只使用<a href="BusinessOrderInfo/page.aspx">?
Jamie Kitson 2012年

12
@JamieKitson如果这样做,则仅当相对于用户在站点上当前位置的路径正确时才起作用。您可能还想知道为什么不只将其<a href="https://stackoverflow.com/BusinessOrderInfo/page.aspx" >用于绝对路径。也不要这样做,因为仅当您将Web应用程序部署到域的根目录(例如www.example.com)时,它才起作用。但是,如果部署到子目录(例如www.example.com/MyAppRoot),它将无法正常工作。始终最好确保使用与应用程序根目录相对的URL(带有的URL ~),以确保您的Web应用程序可移植。
杰西·韦伯

1
我认为您必须将runat =“ server”放入标题标签中才能解决链接标签。
Tillito

添加runat =“ server”可能在某些标签中引起副作用。最值得注意的是script标签。
Daniel Santos

在后面的代码,哪一个是正确的,Response.Redirect("webform2.aspx")还是Response.Redirect("~/webform2.aspx")
迪伦·岑斯基

21

通过添加runat =“ server”属性,可以将HTML控件转变为服务器控件。

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

请记住-这样做的缺点是性能受到损害,因为在需要生成页面时将图像标签转换为服务器控件,而实际上并不需要这样做。
atconway 2011年

如果容器标签中包含runat =“ server”,这似乎也可以工作,至少当希望我的收藏夹图标位于根路径中并且可以从任何使用主页
马修·洛克

11

代字号指向应用程序的根目录,并将在控件属性(例如NavigateUrl)中正确转换。

我的理解是,如果在纯HTML标记中使用它,则ASP.Net不会翻译它。


8
这基本上是对的。如果您使用<img />之类的普通HTML标记并将其命名为runat =“ server”,则可以成功使用虚拟路径来引用您的内容。
内森·泰勒

0

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

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

-1

此功能还可用于解析非服务器元素的路径

VirtualPathUtility.ToAbsolute($"~/App_Themes/Default/Icons/myimage.gif")
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.