2010-01-02 4 views
0


URL rebasage fonction

1) Avec des éléments Html qui n'ont pas runat = « server » attribut, les chemins absolus et relatifs sont envoyés au navigateur comme ils sont. Avec les contrôles serveur, Asp.Net runtime fournit fonctionnalité de rebasage d'URL, où les URL (spécifiées par les contrôles serveur contenus dans les pages maîtres, les thèmes ou les contrôles utilisateur) relatives aux pages maîtres, thèmes ou contrôles utilisateur sont modifiées dynamiquement afin que le navigateur puisse localiser ressources référencées utilisant des URL relatives à la dernière page envoyée au navigateur. A) En plus des pages maîtres, des thèmes et des commandes utilisateur, y a-t-il d'autres situations où fonctionnalité de rebasage d'URL est nécessaire?


2) En supposant que Test.aspx se trouve à la racine d'une application web (WebApp20/Test.aspx), tandis que le fichier image est situé à WebApp20/Images/award.gif, puis dans la dernière page envoyée au navigateur les deux URL suivants se résoudront à src = "Images/award.gif".

test.aspx:

<img id="A" src="Images/award.gif" alt="image" runat="server" /> 

<br> 

<img id="B" src= "~/Images/award.gif" alt="image” runat="server" /> 


Je comprends que « ~ » est résolu par Asp.Net à la racine de l'application Web en cours et je vois aussi les avantages de l'utilisation dans Dans certaines situations, dans l'exemple ci-dessus, le contrôle B n'en a pas vraiment besoin pour trouver une image, et donc B pourrait à la place avoir src = "Images/award.gif". Et pourtant j'ai vu quelques exemples de code où les programmeurs ont utilisé "~/Images/award.gif" au lieu de "Images/award.gif".

a) Y at-il une raison particulière dans l'exemple ci-dessus nous préférerions en utilisant "~/Images/award.gif" au lieu de "Images/award.gif"?


Thanx

Répondre

3

Le tilde (~) est une sorte de raccourci dans ce cas. C'est utilisé pour exprimer la racine de votre application. Le tilda est lu par les méthodes ResolveClientUrl et ResolveUrl et renvoie le chemin basé sur la racine réelle (vous pouvez également appeler ces méthodes directement - plus d'informations dans les liens ci-dessous).

Il y a deux bonnes raisons d'utiliser cette méthode:

RAISON 1

racine de votre application lorsqu'il est déployé à un site, pourrait être «/» et sur un autre site, il est peut-être '/ somefolder /'. L'utilisation de cette méthode vous donnera un chemin correct dans les deux cas.

RAISON 2

Si vous incluez cette balise image dans un contrôle utilisateur ou dans votre page maître, puis les pages résultantes pourraient avoir plusieurs chemins (donc le chemin relatif au dossier d'images pourrait être différent pour chaque page). Cela vous donnera un moyen d'accéder au dossier images où que vous soyez dans votre application.

RAISON 3

Au cours du développement, les choses changent beaucoup. Vous démarrez une application avec un ensemble d'exigences et le client change d'avis. Vous pouvez démarrer une application avec un seul design et voir que vous devez changer les choses. Dans l'un de ces cas, vous devrez peut-être déplacer des pages (dans et hors des dossiers). L'utilisation de cette méthode vous permet de déplacer des fichiers sans avoir à les réécrire.

Voir: Control.ResolveUrl Method

Voir: Control.ResolveClientUrl Method

+0

Je vois la nécessité d'utiliser ~ dans les situations que vous avez mentionnées, mais je ne vois aucun avantage à utiliser ~ dans l'exemple que j'ai fourni – carewithl

+1

Que se passe-t-il lorsque vous déplacez votre page de la racine à certains sous dossier? –

+0

Donc, je devrais utiliser ~ juste au cas où je déciderais de déplacer une page dans un futur, même si en ce moment je suis sûr que la page restera où elle est? – carewithl

1

contrôles peuvent être inclus à partir de pages situées dans différents chemins. dans ce cas, le html du contrôle devrait spécifier le chemin complet avec ~ ou une autre méthode, car il ne peut pas garantir que le chemin relatif sera valide dans toutes les pages qui l'incluent.

+0

Je vois la nécessité d'utiliser ~ dans la situation que vous avez mentionnée, mais je ne vois aucun avantage à utiliser ~ dans l'exemple que j'ai fourni – carewithl

+1

ouais c'est mieux pour les contrôles et les modèles, cela pourrait aussi aider si vous bougez la page pendant le développement ... alors encore une fois, les images ou n'importe quel répertoire référencé pourraient bouger, donc parfois un chemin relatif est meilleur. – jspcal

1

La réécriture d'URL est un autre exemple de cas où le rebasage peut être utilisé (ou devrait être évité).

Par exemple, si vous appelez:

context.RewritePath(url, false); 

qui empêche les URL dans la page de destination d'être rebasées vers la nouvelle URL, de sorte que les URL relatives à la page seront toujours correctement. Définir le second argument sur true entraînera le rebasage des URL sur la page.