2008-09-15 7 views
2

J'ai commencé à travailler un peu avec des pages maîtres pour un site ASP.net mvc et j'ai rencontré une question. Lorsque je lier dans une feuille de style sur la page maître, il semble mettre à jour le chemin vers la feuille correctement. C'est dans le code que j'aiChemins dans les pages maîtres

<link href="../../Content/Site.css" rel="stylesheet" type="text/css" /> 

mais en regardant à la source une fois la page est un navigateur je reçois

<link href="Content/Site.css" rel="stylesheet" type="text/css" /> 

qui est parfait. Cependant, la même traduction de chemin ne semble pas fonctionner pour les fichiers de script.

<script src="../../Content/menu.js" type="text/javascript"></script> 

vient juste comme la même chose. Il semble toujours fonctionner sur une page de niveau supérieur mais je soupçonne que c'est juste le navigateur/serveur Web corrigeant mon erreur. Y a-t-il un moyen d'obtenir que le chemin src soit globalisé?

Répondre

3
<script src="<%= ResolveClientUrl("~/Content/menu.js") %>" type="text/javascript"></script> 
+0

Impressionnant, c'est exactement ce qui a été absent dans le web pages depuis leur création – stimms

+0

Si cela se trouve dans le , il vaut peut-être mieux utiliser <% # et appeler la base de données à la place. <% = vous empêche d'ajouter dynamiquement au conteneur, ce que de nombreux contrôles Web font automatiquement – Keith

0

Utilisez ce lieu:

<link href="~/Content/Site.css" rel="stylesheet" type="text/css" /> 
+0

Cela ne fonctionnera pas - le ~/est remplacé côté serveur, vous devez ajouter un runat = « server » ou envelopper l'emplacement dans un ResolveClientUrl – Keith

1

Faire une méthode d'extension. Voici une méthode:

public static string ResolveUrl(this HtmlHelper helper, string virtualUrl) 
{ 
    HttpContextBase ctx = helper.ViewContext.HttpContext; 
    string result = virtualUrl; 

    if (virtualUrl.StartsWith("~/")) 
    { 
     virtualUrl = virtualUrl.Remove(0, 2); 

     //get the site root 
     string siteRoot = ctx.Request.ApplicationPath; 

     if (!siteRoot.EndsWith("/")) 
      siteRoot += "/"; 

     result = siteRoot + virtualUrl; 
    } 
    return result; 
} 

Vous pouvez écrire votre ref script comme:

<script type="text/javascript" src="<%= Html.ResolveUrl("~/Content/menu.js")%>"></script> 
0

ou vous pouvez utiliser la balise BASE en vous chef de section de la page. Tous vos liens sont alors relatifs à l'emplacement entré dans la balise "base", et vous n'avez pas à utiliser "../../" et "~" choses. Sauf les liens dans les fichiers CSS (url de fond, etc), où les liens sont relatifs à l'emplacement du fichier css.

Questions connexes