2010-08-18 17 views
13

No necesariamente necesito ejecutarlo en el servidor, sin embargo, me gustaría usar la sintaxis ~/js/somefile.js.¿Cómo puedo usar runat = "server" en una etiqueta de script en asp.Net

Anteriormente, acababa de configurar todo con rutas absolutas y establecía mi proyecto en el nivel raíz. SO, solo declararía todas mis hojas de estilo, imágenes de fondo y archivos javascript como /css/somefile.css

Sin embargo, para este proyecto, no se ejecuta como raíz.

No puedo poner runat="server" en una etiqueta de secuencia de comandos.

Puedo ponerlo en una etiqueta de enlace, sin embargo.

Esto debe ser un problema común con algunas respuestas simples.

Respuesta

19

Lo que siempre he hecho es utilizar un script etiqueta normal y puso a los src en <% %> etiquetas, como se ilustra here:

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

Gracias! Sí, ahora recuerdo haber visto esto antes. – Armstrongest

+0

Solo un FYI, según esta publicación: http://stackoverflow.com/questions/778952/the-control-collection-cannot-be-modified-because-the-control-contains-code-blo es mejor usar # (Expresión de enlace de datos) y enlace desde atrás. – Armstrongest

+0

@dl -_-lb: Nunca lo vi antes, pero tiene sentido. ¡Gracias! – David

3

Puede usar funciones dentro de la cadena de ruta, por ejemplo,

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

Sin embargo esa es la sintaxis de ASP.NET MVC para rutas locales - No puedo recordar la versión formas de la parte superior de la cabeza.

+0

versión formas es la misma. La sintaxis MVC se hereda de los formularios web. –

+0

@Joel Quise decir que la clase 'UrlHelper' que estoy usando es MVC-only. Como los otros me golpearon, la versión de formularios es 'ResolveUrl' en' System.Web.UI.Control'. – Rup

1

Tomado de dailycoding.com:

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

Jaja, ¡golpeado por un minuto! – palswim

11

Usted puede utilizar el ScriptManager para esto:

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

He hecho esto en el pasado, sí ... Me pregunto cuál es la mejor manera. ¿Esto agrega alguna otra sobrecarga? – Armstrongest

+0

ScriptManager (o ToolkitManager) es generalmente la opción ideal en ASP.NET Webforms. –

+2

¿Por qué se prefiere a ResolveUrl? – Armstrongest

2

Usted puede conseguir plenamente lo que quiere envolviendo etiqueta script con asp: ContentPlaceHolder y se puede acceder a él desde código subyacente, por ejemplo conjunto va a ser ejecutado o no mediante el establecimiento de visibles propiedad a cierto o false. Aquí está el ejemplo:

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

y de código subyacente:

PrintPreviewBlock.Visible = true; 
Cuestiones relacionadas