2010-08-18 14 views
13

Non ho necessariamente bisogno di eseguirlo sul server, tuttavia, vorrei usare la sintassi ~/js/somefile.js.Come posso usare runat = "server" su un tag script in asp.Net

In precedenza, avevo appena impostato tutto con i percorsi assoluti e impostato il mio progetto al livello principale. Quindi, dichiarerei semplicemente tutti i miei fogli di stile, immagini di sfondo e file javascript come /css/somefile.css

Tuttavia, per questo progetto, non viene eseguito come root.

Non riesco a inserire runat="server" su un tag di script.

Posso metterlo su un tag di collegamento, però.

Questo deve essere un problema comune con alcune risposte semplici.

risposta

19

Quello che ho sempre fatto è usare un normale script tag e mettere le src in <% %> tag, come illustrato here:

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

Grazie! Sì, ora ricordo di averlo visto prima. – Armstrongest

+0

Solo una FYI, secondo questo post: http://stackoverflow.com/questions/778952/the-controls-collection-cannot-be-modified-because-the-control-contains-code-blo è meglio usare # (DataBinding Expression) e Bind da dietro. – Armstrongest

+0

@dl -_- lb: mai visto prima, ma ha senso. Grazie! – David

3

È possibile utilizzare le funzioni all'interno della stringa del percorso, tuttavia, ad es.

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

Tuttavia questa è la sintassi ASP.NET MVC per percorsi locali - non riesco a ricordare la versione forme fuori dalla parte superiore della mia testa.

+0

versione forme è la stessa. La sintassi MVC è ereditata dai moduli Web. –

+0

@Joel Intendevo che la classe 'UrlHelper' che sto usando è MVC-only. Come gli altri mi hanno battuto, la versione dei form è 'ResolveUrl' su' System.Web.UI.Control'. – Rup

1

Tratto da dailycoding.com:

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

Haha, picchiato di un minuto! – palswim

11

È possibile utilizzare la ScriptManager per questo:

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

In passato ho fatto questo, sì ... Mi chiedo quale sia il modo migliore. Questo aggiunge qualche altro sovraccarico? – Armstrongest

+0

ScriptManager (o ToolkitManager) è generalmente la scelta ideale in ASP.Webforms NET. –

+2

Perché è preferibile su ResolveUrl? – Armstrongest

2

È possibile ottenere pienamente ciò che si vuole avvolgendo tag script con asp: ContentPlaceHolder e si può accedere da codice dietro, ad esempio set sarà esso essere eseguito o non impostando visibile proprietà vero o false. Ecco l'esempio:

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

e dal codice dietro:

PrintPreviewBlock.Visible = true;