VS2012 – Web Forms – Confusion groupée

J’ai créé un nouveau projet de formulaires Web ASP.NET via Visual Studio 2012. Malheureusement, le fichier Site.Master par défaut est très déroutant. (Je poste ces questions ensemble car elles sont très liées et font un peu référence au même code.)

Tout d’abord, je comprends déjà le but du groupage et de la minification, donc pas besoin d’en discuter. Cependant, je ne comprends pas ce qui se passe avec la façon dont les scripts sont inclus dans la page maître par défaut.

Question 1:
Pourquoi un ensemble appelé «~ / bundles / WebFormsJs» est-il créé dans le fichier BundleConfig.cs et pourtant, dans la page maître, chacun de ces fichiers .js individuels est répertorié un par un dans ScriptManager?

Inside BundleConfig.cs:

bundles.Add(new ScriptBundle("~/bundles/WebFormsJs").Include( "~/Scripts/WebForms/WebForms.js", "~/Scripts/WebForms/WebUIValidation.js", "~/Scripts/WebForms/MenuStandards.js", "~/Scripts/WebForms/Focus.js", "~/Scripts/WebForms/GridView.js", "~/Scripts/WebForms/DetailsView.js", "~/Scripts/WebForms/TreeView.js", "~/Scripts/WebForms/WebParts.js")); 

Inside Site.Master:

  

Comme vous pouvez le voir, chacun de ces fichiers .js est répertorié individuellement dans ScriptManager. Je ne vois même pas de référence au bundle “WebFormsJs” créé en dehors de BundleConfig.cs. Pourquoi ce bundle a-t-il déjà été créé si chacun de ces fichiers javascript devait être référencé individuellement dans ScriptManager?

Question 2:
Pourquoi un ScriptManager est-il utilisé de cette façon? J’avais l’impression que ScriptManager était requirejs pour la version d’Ajax de Microsoft, comme l’utilisation de UpdatePanels. Quel est le but de l’utilisation de ScriptManager ici … juste pour simplement enregistrer des fichiers javascript?

Question 3:
Quelle est la différence entre l’enregistrement de fichiers javascript via ScriptManager et le haut de Site.Master où il utilise l’approche suivante?

  

Question 4:
Dans le ScriptManager, j’ai également remarqué ceci:

     

… Je peux au moins reconnaître “MsAjaxBundle” de BundleConfig.cs, mais où jquery et jquery.ui.com sont-ils définis? J’ai fait une recherche et y ai trouvé une référence dans packages.config.

   

Mais je ne comprends pas non plus ce qui se passe ici. Je pensais que packages.config était utilisé pour NuGet. De plus, je ne vois même pas un chemin répertorié ici pour l’emplacement de ces fichiers jQuery .js. Ils sont juste listés ici et étrangement associés à une version particulière du .NET Framework (4.5 dans mon cas). Pourquoi une ressource javascript serait associée à une version du .NET Framework me dépasse.

Quoi qu’il en soit, la question 4 est la suivante: comment la ressource “jquery” dans le ScriptManager est-elle ajoutée / utilisée? Pourquoi les fichiers jQuery .js ne sont-ils pas regroupés dans BundleConfig.cs comme tous les autres bundles?

Question 5:
Puis-je supprimer la référence de script suivante de Site.Master si je ne prévois pas d’utiliser UpdatePanel et ce type de contrôles Microsoft Ajax? Je suis un peu perplexe quant à pourquoi cela est même inclus ici par défaut.

  

UPDATE: Ceci est un nouveau billet de blog qui parle aussi de cela: article ASP.NET

À la base, Webforms + Bundling ressemble à ceci en raison d’un ensemble de comportements hérités que nous n’avons pas pu modifier dans scriptmanager.

En ce qui concerne vos questions spécifiques:

  1. Fondamentalement, cela signifie que la déduplication fonctionne correctement, le gestionnaire de script a une limitation pour les ressources de script d’origine qui les empêchent d’être scriptées, elles doivent donc être mappées sur le disque qui est ensuite correctement déduit car les fichiers sont déjà inclus dans le bundle. WebformsBundleJs est un mappage de script créé à l’intérieur du code PreAppStart à l’intérieur des nupkgs ScriptManager. (Je suis d’accord, c’est presque impossible à découvrir)

  2. Les nouvelles fonctionnalités de la version 4.5, telles que la validation discrète, nécessitent jquery (via scriptmanager), ce qui explique pourquoi le gestionnaire de scripts a été utilisé pour garantir que jquery ne soit pas rendu deux fois.

  3. Cela fonctionnera bien, mais jamais avec ScriptManager. Donc, pour modernizr ce ne sera pas un problème.

  4. Les paquets jquery déposent les fichiers jquery sur le disque dans votre dossier Scripts.

  5. Cette référence tire dans le msajaxbundle qui contient tous les scripts ajax, si vous n’en avez pas besoin, je pense que sa suppression est sûre.

J’ai eu plus ou moins les mêmes questions aussi …

Cependant, en ce qui concerne la question 4, j’ai un avis différent.

WebFormsBundle et MsAjaxBundle sont tous deux des références de script définies dans PreAppStatCode (comme vous ne pouvez pas trouver où se trouve ce fichier).

Donc, j’ai le sentiment qu’au même endroit (ScriptManager.WebForms PreAppStartCode), par défaut, il existe une autre définition pour la référence de script jquery et jQueryUI. Ces références sont utilisées dans le gestionnaire de scripts.

Ce processus est très important car, de cette façon, vous profitez de certaines fonctionnalités importantes telles que CDN, etc. Dans la définition de jquery dans PreAppStartCode pour cette référence spécifique, il existe un chemin CDN défini qui sera utilisé si vous activez le ActiverCDN dans le gestionnaire de script de votre page maître (EnableCdn = “true”)

Juste pour clarifier quelque chose de la réponse à l’acceptation explication de la question 1:

La raison des références de script aux fichiers js de formulaires Web individuels est de permettre aux fichiers locaux (tels que “~ / Scripts / WebForms / WebForms.js”) de remplacer les mêmes fichiers qui existent dans System.Web.dll (If vous reflétez le System.Web.dll et regardez dans le dossier de références que vous trouverez les mêmes fichiers .js).