2010-08-18 18 views
13

Je n'ai pas nécessairement besoin de l'exécuter sur le serveur, cependant, je voudrais utiliser la syntaxe ~/js/somefile.js.Comment utiliser runat = "server" sur une balise de script dans asp.Net

Auparavant, je venais de tout définir avec des chemins absolus et de définir mon projet à la racine. SO, je voudrais juste déclarer toutes mes feuilles de style, images de fond et fichiers javascript quelque chose comme /css/somefile.css

Cependant, pour ce projet, il ne fonctionne pas en tant que root.

Je ne peux pas mettre runat="server" sur une étiquette de script.

Je peux le mettre sur une étiquette de lien, cependant.

Cela doit être un problème commun avec quelques réponses simples.

Répondre

19

Ce que je l'ai toujours fait est d'utiliser une balise script normale et mettre les src dans <% %> balises, comme illustré here:

<script language="javascript" src='<%=ResolveUrl("~/App_Themes/MainTheme/jquery.js")%>' type='text/javascript'></script> 
+0

Merci! Oui, maintenant je me souviens avoir vu ça avant. – Armstrongest

+0

Juste un FYI, selon ce post: http://stackoverflow.com/questions/778952/the-controls-collection-cannot-be-modified-because-the-control-contains-code-blo il est préférable d'utiliser # (DataBinding Expression) et Lier par derrière. – Armstrongest

+0

@dl -_- lb: Je n'ai jamais vu ça auparavant, mais c'est logique. Merci! – David

3

Vous pouvez utiliser des fonctions à l'intérieur de la chaîne de chemin, bien que, par ex.

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

Cependant c'est la syntaxe ASP.NET MVC pour les chemins locaux - je ne me souviens pas la version forme du haut de ma tête.

+0

formes version est la même. La syntaxe MVC est héritée des formulaires Web. –

+0

@Joel Je voulais dire que la classe 'UrlHelper' que j'utilise est MVC seulement. Comme les autres me battent, la version des formulaires est 'ResolveUrl' sur' System.Web.UI.Control'. – Rup

1

Taken de dailycoding.com:

<script language="javascript" src="<%=ResolveUrl("~/[PATH]")%>" type="text/javascript"></script> 
+0

Haha, battu par une minute! – palswim

11

Vous pouvez utiliser la ScriptManager pour cela:

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
     <Scripts> 
      <asp:ScriptReference Path="~/js/somefile.js" /> 
     </Scripts> 
</asp:ScriptManager> 
+0

Je l'ai fait par le passé, oui ... Je me demande quel est le meilleur moyen. Cela ajoute-t-il d'autres frais généraux? – Armstrongest

+0

ScriptManager (ou ToolkitManager) est généralement le choix idéal dans ASP.Webforms NET. –

+2

Pourquoi est préféré à ResolveUrl? – Armstrongest

2

Vous pouvez obtenir pleinement ce que vous voulez en enroulant balise script avec asp: ContentPlaceHolder et vous pouvez y accéder à partir du code derrière, par exemple ensemble sera-il être exécuté ou non par la mise en visible propriété à vrai ou false. Voici l'exemple:

<asp:ContentPlaceHolder runat="server" ID="PrintPreviewBlock" Visible="false"> 
    <script id="PrintPageCall" type="text/javascript" > 
     $(function() { 
      window.print(); 
     }); 
    </script> 
</asp:ContentPlaceHolder> 

et du code sous-jacent:

PrintPreviewBlock.Visible = true;