2010-07-07 20 views
9

Tengo una aplicación ASP.NET que usa una mezcla de ASP.NET AJAX (incluyendo UpdatePanel) y jQuery escrito por varios desarrolladores de diferentes orígenes.Forma correcta de incluir scripts en una página asp.net

Algunas incluyeron secuencias de comandos dentro de la propia ScriptManager <asp:ScriptManager><Scripts><asp:ScriptReference...., mientras que otros utilizan Page.ClientScript.RegisterClientScriptInclude en el código detrás, y otros utilizaron recta <script src=""> para incluir secuencias de comandos.

Me gustaría consolidarme de una manera única de manejar esto si es posible, pero no estoy seguro de cuáles son los pros/contras de cada forma y de qué manera se prefiere.


Un ejemplo sería:

protected override void Render(HtmlTextWriter writer) 
{ 
    Page.ClientScript.RegisterClientScriptInclude("jQuery", ResolveClientUrl("~/scripts/jquery/js/jquery-1.4.2.min.js"));  
    base.Render(writer); 
} 

vs

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
    <Scripts> 
     <asp:ScriptReference Path="~/scripts/jquery/js/jquery-1.4.2.min.js" /> 
    </Scripts> 
</asp:ScriptManager> 

vs

<script src="Scripts/jQuery/js/jquery-1.4.2.min.js" type="text/javascript"></script> 

Respuesta

6

No siempre es posible incluir toda la secuencia de comandos en el marcado.
Si la secuencia de comandos depende de datos dinámicos, tendrá que "inyectar" la secuencia de comandos desde el código subyacente.

Mi regla es siempre tratar de evitar el script "inyectar" desde el código, si es posible, y solo usarlo como último recurso.

Editar:
Usando scriptmanager es preferida si tiene muchos diferentes archivos de script.
Al utilizar scriptmanager todos los scripts se "concatenarán" en un único archivo. Esto tiene un impacto en cómo el navegador descarga los scripts. Los navegadores generalmente tienen un límite de 2 conexiones simultáneas y si tiene 10 secuencias de comandos, deberá descargarlas todas en 5 pasos. Scriptmanager se encargará de que todo ocurra en un solo paso.

+0

No hay nada dependiendo de los datos dinámicos, por lo que preferiría moverlos al marcado. Mi intuición es que ponerlos en el ScriptManager sería "mejor", pero no tengo nada para apoyar eso. – Greg

6

Un <asp:scriptreference> es el declarativa equivalente a llamar al ScriptManager.RegisterScriptBlock(), al igual que cualquier otra declaración de control asp.net es similar a hacer una programática Controls.Add().

Dicho esto, realmente no hay una "forma preferida". Si está creando controles web distribuibles, querrá llamar a los diversos métodos .RegisterScript...() desde las rutinas de configuración de su control, en lugar de confiar en que el usuario tenga que agregar el marcado.

Si solo desea incluir scripts en un sitio web, probablemente sea más conveniente utilizar el método de marcado.

Si agrega scripts durante las llamadas Ajax, entonces querrá usar el ScriptManager para hacerlo. Si está agregando scripts en devoluciones de datos normales, querrá usar el ClientScriptManager para hacerlo.

So ...es difícil enumerar los pros y los contras. En su caso, si no está compilando código redistribuible, entonces la forma más obvia y directa es incluir referencias de scripts mediante el marcado, ya que tiende a ser más visible. Pero no estoy seguro de que pueda consolidar cada ocurrencia a un método, porque todos los métodos existen por una razón, y es posible que necesite usar más de uno.

+0

Gran respuesta. Esto me da una mejor idea de cuándo usar cada enfoque, y en mi caso solo incluye guiones en un sitio web. No creo que nuestra secuencia de comandos-incluye difieren entre obtener y publicar. – Greg

Cuestiones relacionadas