2009-10-12 5 views
2

Si j'ai dans mon fichier Site.master:ASP.NET MVC Content folder - Les URL ont changé dans la source pour CSS/images mais pas pour JS?

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

puis aller à la page Voir la source de mon site (lorsqu'il est déployé sur le serveur réel), il rend comme ceci:

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

Mais si j'ai un fichier JS dans le dossier Scripts /, il n'imite pas le même comportement. Où est la magie? Y a-t-il un réglage quelque part qui cause cela?

Merci,

~ Justin

Répondre

6

J'utilise toujours l'aide d'URL pour vous assurer.

<link href="<%= Url.Content("~/content/site.css") %>" 
     rel="stylesheet" 
     type="text/css" /> 

<script type="text/javascript" 
     src="<%= Url.Content("~/scripts/jquery-1.3.2.min.js") %>"> 
</script> 

En fait, j'ai remplacé tout cela par des extensions HtmlHelper qui font la même chose.

<%= Html.Stylesheet(Url.Content("~/content/site.css)) %> 
<%= Html.Javascript(Url.Content("~/scripts/jquery-1.3.2.min.js")) %> 
+0

Ah. Je ne connaissais pas Url.Content. C'est utile. Mais j'aimerais quand même comprendre pourquoi l'une est réécrite dans la source de la page et l'autre non. – RationalGeek

2

La tête possède l'option runat = "server", ce qui signifie qu'elle exécute ce côté "magique" côté serveur pour les références de liens. AFAIK cela n'arrive pas pour les références de scripts.

+0

Si cela était vrai, puisque les deux choses sont dans la tête, les deux ne seraient pas réécrites? – RationalGeek

+0

Vous avez pensé. Je n'ai pas assez creusé dans la mécanique mais je sais que cela fonctionne. Sortez le runat = "server" de la tête et voyez ce qui se passe. Ma conjecture est que Microsoft recherche spécifiquement la balise de lien et pas la balise de script. –

+0

Voir aussi http://stackoverflow.com/questions/446533/what-is-the-status-of-runatserver-tags-in-asp-net-mvc pour plus d'informations –

Questions connexes