2010-05-18 5 views
0

Lorsque je glisse et dépose mon fichier image/script/css dans ma vue, le chemin relatif utilisera automatiquement pour se référer aux fichiers.Mvc chemin relatif en utilisant le répertoire virtuel .. help!

exemple:

<link href="../../Content/style.css" rel="stylesheet" type="text/css" /> 
<script src="../../Scripts/jquery-min.js" type="text/javascript"></script> 
<img src="../../Images/logo.jpg" /> 

Il fonctionne très bien quand je l'héberger sur mon répertoire racine, mais si j'utilise le répertoire virtuel alors que mon fichier css pouvoir correctement se référer, le reste sera de retour 404. .. comme il se référera à http://{root}/Images/logo.jpg plutôt que http://{root}/{virtual directory}/Images/logo.jpg

Mais pourquoi le fichier css fonctionne? et comment spécifier le chemin d'accès relatif à la fois pour les cas de répertoire virtuel & racine?

Répondre

5

quelque chose comme ...

<script type="text/javascript" 
      src="<%= Url.Content ("~/Scripts/jquery.js") %>"> 
    </script> 

fera l'affaire

2

En outre, lié à Kazi Manzur's MVC Best Practices, vous pouvez créer UrlHelper méthodes pour gérer la création de l'ensemble de votre contenu (script, stylesheet, images , etc) chemins de fichiers. De cette façon, si vous changez le répertoire, tout ce que vous devez faire est de changer la UrlHelper correspondante:

public static string Style(this UrlHelper url, string fileName) 
    { 
     return url.Content("~/content/{0}".FormatWith(fileName)); 
    } 

    public static string Script(this UrlHelper url, string fileName) 
    { 
     return url.Content("~/scripts/{0}".FormatWith(fileName)); 
    } 

Ensuite, dans votre ViewPage ou MasterPage, vous pouvez écrire les chemins comme ceci:

<link href="<%= Url.Style("site.css")%>" rel="stylesheet" type="text/css"/> 
+0

Intéressant . Je suppose que cela est utilisé pour gérer des situations lorsque la production ne correspond pas au développement ou aux configurations de test. Il semble que lire ces hors de la config web le rendrait encore plus dynamique. – MikeJ

+0

Merci, mais avec cette méthode, je vais perdre mon javascript intelliSense dans Visual Studio. Ce que je fais maintenant est d'ajouter un httpmodule personnalisé, avant que la page ne retourne au client, il remplace "../../" par le chemin absolu à l'intérieur du html. – kevin

Questions connexes