2010-11-30 21 views
3

J'ai remplacé mon contrôle asp:ScriptManager par ajaxToolkit:ToolkitScriptManager avec l'attribut CombineScripts="true".ASP.NET Script combinant

Maintenant, quand je voir la source de la page HTML, il est nouvelle balise de script:

<script src="/MyPage.aspx?_TSM_HiddenField_=ctl00__pageBody_asScript_tscAjaxScripts_HiddenField&amp;_TSM_CombinedScripts_=%3b%3bAjaxControlToolkit%2c+Version%3d3.0.20820.30277%2c+Culture%3dneutral%2c+PublicKeyToken%3d28f01b0e84b6d53e%3aen-US%3a06e896ab-1f8c-4bcb-9cc4-0200671cba8a%3ae2e86ef9%3a1df13a87%3ac4c00916%3aaf22e781%3a9ea3f0e2%3ac7c04611%3acd120801%3a3858419b%3a96741c43%3a38ec41c0" /> 

Mais sont aussi encore vieux balises de script: WebResource.axd et plusieurs ScriptResource.axd

Comment puis-je supprimer WebResource.axd et ScriptResource.axd liens de la page?

+0

Avez-vous suivi le conseil ici? http://stackoverflow.com/questions/626659/combine-scripts-in-asp-net-ajax-toolkit –

+0

Je viens de le lire mais il n'y a pas de réponse comment puis-je supprimer les liens WebResource.axd et ScriptResource.axd – ihorko

+0

@ihorko essayez de ne pas appeler RegisterClientScriptResource dans votre code. –

Répondre

0

J'ai écrit un gestionnaire simple pour cela qui semble fonctionner correctement, mais c'est pour ASP.NET MVC, mais il ne devrait pas être si difficile de le faire fonctionner pour les formulaires Web aussi. Je l'ai mis sur github: https://github.com/mastoj/SimpleCompression.

Les bonnes parties avec ma solution sont:

  • Vous n'avez pas besoin de deux copies de votre script; c'est-à-dire, une version minifiée avec l'original.
  • Vous pouvez changer de moteur de compression si vous le souhaitez.
  • Les fichiers sont compressés à la volée et placés dans le cache sur le serveur Webb et le client (vous pouvez mettre à jour un paramètre de version pour forcer le client à télécharger à nouveau le script).
  • Les fichiers sont combinés à la volée.
  • Le fichier combiné et compressé dépend des fichiers d'origine pour être compressé et combiné si vous avez besoin de tester quelque chose dans prod (mais ne le faites pas :)).
  • Et il est facile à utiliser, pour MVC au moins.
0

Si vous utilisez .NET 4.0, vous pouvez utiliser l'attribut enablecdn sur le scriptmanager et il sert le code JavaScript requis à partir du CDN de Microsoft.

Sinon, vous pouvez toujours les fusionner en tant que Scott Hanselman describes here. Vous pouvez également aller plus loin et utiliser un module/filtre HTTP pour combiner ces scripts (WebResource.axd, ScriptResource.axd) en 2 ou 3, cependant, il nécessite une connaissance approfondie de la fondation ASP.NET; Ou bien, vous pouvez casser les appels de méthode Microsoft Ajax dans l'application (c'est à cause de ces mécanismes sophistiqués que UpdatePanel utilise pour mettre à jour une partie de la page, etc ...)

+0

sry ... je ne voulais pas écrire un commentaire, j'étais sur le point d'écrire une réponse :) –

1

Certains composants de l'AjaxControlToolkit ne le font pas soutien combinant des scripts. De: http://blogs.msdn.com/b/delay/archive/2007/06/11/script-combining-made-easy-overview-of-the-ajax-control-toolkit-s-toolkitscriptmanager.aspx

Le script SliderBehavior.js Slider utilise une fonction assez obscure a permis par la propriété PerformSubstitution de l'attribut WebResource qui permet <% = WebResource/ScriptResource%> balises à incorporer dans JS fichiers et obtenir résolu avant que le script est envoyé au le navigateur. Ce comportement n'est pas actuellement pris en charge par ToolkitScriptManager

Il n'y a pas le drapeau magique que vous pouvez activer pour obtenir débarrasser complètement de ces fichiers. L'utilisation de ToolKitScriptManager présente l'avantage de réduire le nombre de ressources nécessaires pour votre page, ce qui améliore les performances. Les fichiers Webresource.axd et Scriptresouce.axd sont utilisés par l'ensemble de l'application, et pas seulement par AjaxControlToolkit. Mon conseil serait d'utiliser un programme comme Fiddler pour voir quelles sont les ressources que le Scriptresource.axd et Webresource.axd sont réellement en train de tirer et de travailler à partir de là.

1

Dans ce scénario en mettant CombineScripts="true" de ajaxToolkit:ToolkitScriptManager signifie que ce combinera tous les fichiers de script utilisés par les contrôles ajax sur cette page, et il chargera le script combiné dans le ci-dessous form-

<script src="/MyPage.aspx?_TSM_HiddenField_=ctl00__pageBody_asScript_tscAjaxScripts_HiddenField&amp;_TSM_CombinedScripts_=%3b%3bAjaxControlToolkit%2c+Version%3d3.0.20820.30277%2c+Culture%3dneutral%2c+PublicKeyToken%3d28f01b0e84b6d53e%3aen-US%3a06e896ab-1f8c-4bcb-9cc4-0200671cba8a%3ae2e86ef9%3a1df13a87%3ac4c00916%3aaf22e781%3a9ea3f0e2%3ac7c04611%3acd120801%3a3858419b%3a96741c43%3a38ec41c0" /> 

Mais dans ScriptResource.axd fichiers, il va charger les fichiers de la bibliothèque Microsoft Ajax comme - MicrosoftAjax.debug.js et MicrosoftAjaxWebForms.debug.js dans une demande séparée. Vous pouvez effectuer une requête unique pour Microsoft Ajax en les combinant.

Vous pouvez utiliser la balise <CompositeScript> explicitement et spécifiez MicrosoftAjax.js, Webform.js et MicrosoftAjaxWebForms.debug.js de les combiner dans une seule requête. De cette façon, vous ne verrez que deux requêtes pour JS, une pour le script combiné des contrôles Ajax sur cette page et une autre pour le script combiné MicrosoftAjax js