web-dev-qa-db-fra.com

utilisation de tilde (~) dans le chemin asp.net

je travaille sur une application asp.net, le lien suivant fonctionne dans IE mais pas dans FF.

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

Le tilde n'est-il pas quelque chose qui ne peut être utilisé que dans les contrôles de serveur asp.net? Où sera-t-il remplacé par un chemin réel?

Est-il possible d'utiliser le tilde dans une balise d'ancrage? Si oui, qu'est-ce que cela signifie?

Quand je suis à la racine, le lien fonctionne

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

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

Le lien généré par ASP.NET est:

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

Est-ce à dessein?

68
Michel

Vous avez raison, cela ne fonctionne que dans les contrôles du serveur. Vous avez ces options de base:

Passez à HyperLink pour s'exécuter en tant que Contrôle Web :

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

Ou, exécutez l’ancre côté serveur en tant que Contrôle HTML

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

Ou utilisez Page.ResolveUrl:

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

Les contrôles HTML peuvent être transformés en contrôles serveur en ajoutant l'attribut runat = "server".

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

Le tilde fait référence au répertoire racine de l'application et sera traduit correctement dans les propriétés de contrôle telles que NavigateUrl. 

Si j'ai bien compris, si vous l'utilisez dans des balises plain-HTML, il ne sera pas traduit par ASP.Net.

11
devio

Si vous supprimez le tilde et utilisez uniquement la barre oblique, vous obtiendrez le même résultat, c’est-à-dire en pointant vers le dossier racine du domaine actuel:

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