2010-07-07 5 views
9

J'ai une application ASP.NET qui utilise un mélange de ASP.NET AJAX (y compris UpdatePanel) et jQuery écrit par plusieurs développeurs d'horizons différents.Une bonne façon d'inclure des scripts dans une page asp.net

Certains scripts inclus dans le ScriptManager lui-même <asp:ScriptManager><Scripts><asp:ScriptReference...., tandis que d'autres utilisés Page.ClientScript.RegisterClientScriptInclude dans le code derrière, et d'autres utilisés directement <script src=""> pour inclure des scripts. Je voudrais consolider à une seule manière de traiter ceci si possible, mais je ne suis pas sûr quels sont les avantages/inconvénients de chaque manière et de quelle manière est préféré.


Un exemple serait:

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> 

Répondre

6

Il est pas toujours possible d'inclure tous les scripts dans le balisage.
Si le script dépend de données dynamiques, vous devrez "injecter" le script à partir du code derrière.

Ma règle est de toujours essayer d'éviter d '«injecter» du code à partir du code si possible et de ne l'utiliser qu'en dernier recours.

Edit:
L'utilisation ScriptManager est préféré si vous avez plusieurs fichiers de script.
Lors de l'utilisation de scriptmanager, tous les scripts seront "concaténés" dans un seul fichier. Cela a un impact sur la façon dont le navigateur télécharge les scripts. Les navigateurs ont généralement une limite de 2 connexions simultanées et si vous avez 10 scripts, vous devrez les télécharger en 5 étapes. Scriptmanager veillera à ce que tout se passe en une seule étape.

+0

Rien ne dépend des données dynamiques, je préférerais les déplacer vers le balisage. Mon instinct est de les mettre dans le ScriptManager serait "mieux", mais je n'ai rien pour soutenir cela. – Greg

6

Un <asp:scriptreference> est le déclaratif l'équivalent d'appeler ScriptManager.RegisterScriptBlock(), tout comme toute autre déclaration de contrôle asp.net est similaire à faire un programme Controls.Add(). Cela étant dit, il n'y a vraiment pas de "moyen préféré". Si vous développez des contrôles Web distribuables, vous devez appeler les diverses méthodes .RegisterScript...() à partir des routines d'installation de votre contrôle, plutôt que de devoir ajouter un balisage.

Si vous souhaitez simplement inclure des scripts dans un site Web, il est probablement plus pratique d'utiliser la méthode de balisage.

Si vous ajoutez des scripts lors d'appels Ajax, vous devez utiliser le ScriptManager pour le faire. Si vous ajoutez des scripts sur des publications régulières, vous devez utiliser le ClientScriptManager pour le faire.

Alors ...il est difficile d'énumérer les avantages et les inconvénients. Dans votre cas, si vous ne créez pas de code redistribuable, la manière la plus évidente et la plus directe consiste à inclure des références de script via le balisage, car cela a tendance à être plus visible. Mais je ne suis pas sûr que vous serez en mesure de consolider toutes les occurrences à une méthode, car toutes les méthodes existent pour une raison, et vous devrez peut-être utiliser plus d'un.

+0

Bonne réponse. Cela me donne une meilleure idée du moment d'utiliser chaque approche, et dans mon cas, il s'agit simplement d'inclure des scripts dans un site Web. Je ne pense pas que notre script-diffère entre get et posts. – Greg

Questions connexes