URL de Base dans les ASP.net Master Pages avec des Répertoires virtuels
J'ai un ASP.net page maître. Dans ce master, j'ai tous mes fichiers css et javascript définie. J'ai également quelques images et quelques boutons et des liens hypertexte.
Toutes les url sont tous déclarés en tant que parent ie "/scripts/ian.js"
Tout fonctionne bien si ce site est à la racine du site, mais j'en ai besoin pour travailler dans un répertoire virtuel.
Mon problème est que lorsque je place ce site web dans un répertoire virtuel sous une racine du site, tous mes liens pointent vers la racine du site. donc, mon de liens qui pointent vers www.root.com/scripts/ian.js mais il doit être dirigée vers www.root.com/virtualDir/scripts/ian.js
Je pensais que le Base Href dans la balise d'en-tête pourrait l'aider, mais pour l'instant il ne semble pas être l'aider de toute façon. Tous les liens sont toujours orientés vers la racine du site quand j'passez la souris au-dessus d'eux.
Ce que je voudrais, c'est un seul paramètre dans IIS ou le fichier de config que je peux mettre l'url de la racine et d'une image, d'un script ou un lien sur la page principale ou le contenu de la page, serait point à la bonne place.
Des suggestions ou des idées sont les bienvenus.
Grâce
OriginalL'auteur SetiSeeker | 2010-03-16
Vous devez vous connecter pour publier un commentaire.
Ceux qui semblent être absolu URL que vous utilisez, plutôt que par rapport aux URL, ce qui est probablement la raison pour laquelle le
<base />
balise n'est pas l'effet souhaité:-- de http://www.w3.org/TR/html401/struct/links.html#h-12.4
Vous pouvez essayer de retirer le premier '/' à partir de votre URL pour voir si cela fonctionne?
À défaut, j'ai tendance à utiliser ResolveClientUrl pour obtenir autour de questions de ce genre, vous pouvez utiliser de la même manière que d'autres ont suggéré l'utilisation d' ResolveUrl:
Espère que cette aide.
OriginalL'auteur Ian Oxley
La plupart des balises, y compris régulière des balises HTML comme <lien>, <img>, etc pouvez utiliser le ~/ que le chemin racine de l'application si l' *'runat="server"' attribut est défini.
par exemple.
Ce qui rend une balise balise de serveur et le tilde est remplacé par la racine de l'application avant la sortie est renvoyé au navigateur.
Cela ne fonctionne pas comme prévu pour les <script> bien que. Lorsque de " runat="server" est définie par la balise script, le script est considéré comme javascript côté serveur et l'exécution est tentée.
Pour contourner ce problème, vous pouvez injecter du javascript à l'aide de l'un des registre script client méthodes. votre vous pouvez utiliser le <%= ResolveUrl('~')%> balise dans votre balise de script.
Pas que je sache. J'essaie de toujours utiliser "~" les chemins relatifs ou le dossier des chemins relatifs par exemple. "../quelque chose". Cela permet de déplacer l'application dans le futur. Une bonne rechercher/remplacer les regex doit être capable d'attraper la plupart, si pas tous vos liens litigieux.
Alors que vous pouvez utiliser "~" avec runat=server CSS références de fichier, de le faire pour les fichiers JavaScript sera plus susceptible de provoquer des erreurs, parce qu'il aura la force d'exécution de JavaScript, code côté serveur.
OriginalL'auteur kervin
Cette méthode statique vous renvoie complet http chemin d'accès au dossier racine de votre application (site web ou le répertoire virtuel)
Vous pouvez écrire dans la page maître:
OriginalL'auteur meir
Utiliser le tilde(~) dans yout référence (j'.e ~/scrips/ian.js)...à voir si ça fonctionne
Pour les liens essayez de Page.ResolveUrl dans le .page aspx.
OriginalL'auteur hallie
Donc j'ai trouvé cette IIS étrangeté de la nuit dernière:
Ne fonctionnera pas correctement dans une application virtuelle qui est dans un sous-répertoire du principal site IIS.
Au lieu de cela, vous DEVEZ faire comme ceci:
Qui est la méthode standard pour le faire, mais si vous n'êtes pas à la recherche pour elle, il peut vous surprendre que cette balise supplémentaire rend le chemin d'accès relatif problèmes.
OriginalL'auteur Andy