web-dev-qa-db-fra.com

Utilisation de liens relatifs à la racine du site dans Razor

J'ai un site Web qui fonctionne bien avec Razor (C #). Tout le codage fonctionne correctement lorsque j'utilise mes tests locaux (WebMatrix IIS).

Quand je le mets "en ligne" sur mon serveur le site web n'est pas à la racine du site lui-même

Par exemple:

http: // intranet.mycompany.com/inform

C'est en gros la "racine" de la structure de mes dossiers, donc tous mes dossiers commencent à partir de là (fichier css default.cshtml ... et ainsi de suite).

Mon "_PageStart.cshtml" le voit correctement car lorsque j'accède à mon site à partir du lien http://intranet.mycompany.com/inform il me donne la mise en page que j'ai configurée dans _PageStart.cshtml (et le la mise en page + le rendu default.cshtml)

MAIS rien d'autre n'indique le bon chemin, par exemple: 

<img src="~/images/logos/hdr.png" />

Le titulaire img est là, je peux le voir mais montre que le lien est brisé ... lorsque je clique avec le bouton droit de la souris sur le titulaire img et que je fais les propriétés pour voir où les fichiers doivent se trouver, il me montre: 

http: // intranet.mycompany.com/images/logos/hdr.png

Donc ça va à la racine "complète" pas à la racine relative ...

Comment puis-je résoudre ce problème?

50
pSyToR

Vous devez utiliser des chemins relatifs sur l'ensemble de votre application:

~ ne fonctionnera pas dans le code HTML statique.

Tu peux écrire

<img src="@Url.Content("~/images/logos/hdr.png")" />

ou 

<img src="../images/logos/hdr.png" />

La première approche est appropriée pour les fichiers de présentation où votre chemin relatif peut être modifié lorsque vous avez des URL de routage de longueur différente.

MODIFIER

En ce qui concerne votre question sur les liens normaux:

Lorsque vous créez un lien vers une autre page de votre application, vous ne spécifiez pas le fichier de vue comme cible, mais l'action qui restitue une vue. Pour cela, vous utilisez HtmlHelper ActionLink:

@Html.ActionLink("Linktext", "YourController", "YourAction")

Cela génère automatiquement la bonne adresse pour vous: 

<a href="YourController/YourAction">Linktext</a>

EDIT 2

Ok, pas de MVC - vous devez donc générer vos liens vous-même.

Vous devez également utiliser des chemins relatifs. Ne commencez aucun lien avec le caractère /!

<a href="linkOnSameLevel.cshtml">Link</a>
<a href="../linkOnParentLevel.cshtml">Link</a>
<a href="subFolder/linkOnOneLevelDown.cshtml">Link</a>

EDIT 3

Lorsque vous utilisez des pages de présentation, vous pouvez utiliser la méthode Hrefextension pour générer une adresse URL relative:

<link href="@Href("~/style.css")" ...
91
Jan

Utilisez Url.Content comme indiqué ci-dessous:

<img src="@Url.Content("~/images/logos/hdr.png")" />
4
robasta

Je sais que '~' est ajouté par défaut, mais j'ai tendance à le changer pour que tous les chemins soient relatifs à mon fichier de code plutôt qu'à la racine de l'application, en utilisant ".." par exemple "../images/logos" etc

0
ChrisBD