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

Mic*_*hel 70 c# asp.net

我正在使用asp.net应用程序,以下链接适用于IE,但不适用于FF.

<a href="~/BusinessOrderInfo/page.aspx" >
Run Code Online (Sandbox Code Playgroud)

是不是只能在asp.net服务器控件中使用的波形符.它将被实际路径取代?

是否可以在锚标签中使用波浪号?如果是这样的话是什么意思?

当我在根时,链接工作

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

www.myserver.com/otherpart/default.aspx, click the link, not ok!
Run Code Online (Sandbox Code Playgroud)

ASP.NET生成的链接是:

www.myserver.com/otherpart/~BusinessOrderInfo/page.aspx
Run Code Online (Sandbox Code Playgroud)

这是设计的吗?

Dea*_*ing 91

你是对的,它只适用于服务器控件.你有这些基本选择:

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

<asp:HyperLink NavigateUrl="~/BusinessOrderInfo/page.aspx" Text="Whatever" runat="server" />
Run Code Online (Sandbox Code Playgroud)

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

<a href="~/BusinessOrderInfo/page.aspx" runat="server" >
Run Code Online (Sandbox Code Playgroud)

或者,使用Page.ResolveUrl:

<a href="<%= Page.ResolveUrl("~/BusinessOrderInfo/page.aspx") %>">...</a>
Run Code Online (Sandbox Code Playgroud)

  • @JamieKitson如果你这样做,只有当路径相对于用户在网站上的当前位置是正确的时,它才会起作用.您可能也想知道为什么不使用`<a href="/BusinessOrderInfo/page.aspx">`作为绝对路径.不要这样做,因为它只有在您将Web应用程序部署到域的根目录(例如www.example.com)时才会起作用.如果部署到子目录(例如www.example.com/MyAppRoot),它将无法工作.最好确保使用app-root-relative URL(带有`~`的URL)来确保您的web-app是可移植的. (9认同)

Dam*_*ehy 21

通过添加runat ="server"属性,可以将HTML控件转换为服务器控件.

<a href="~/BusinessOrderInfo/page.aspx" runat="server">
Run Code Online (Sandbox Code Playgroud)


dev*_*vio 11

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

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

  • 这基本上是正确的.如果您使用像<img rel="nofollow noreferrer" />这样的纯HTML标记并为其指定runat ="server",则可以成功使用虚拟路径来引用您的内容. (8认同)