51 votes

VS2012 - Formulaires Web - Confusion groupée

J'ai créé un nouveau ASP.NET Formulaires Web du Projet par le biais de Visual Studio 2012. Malheureusement, le Site par défaut.Fichier maître est très déroutant. (Je suis l'affichage de ces questions ensemble, car ils sont très liés et font référence au même code un peu.)

Tout d'abord, j'ai déjà comprendre le but de la subordination et la minification, donc pas besoin d'en discuter. Cependant, je ne pas comprendre ce qui se passe avec la manière dont les scripts sont inclus dans la page maître par défaut.

Question 1:
Pourquoi un bundle nommé "~/bundles/WebFormsJs", créé à l'BundleConfig.cs fichier, et pourtant, dans la page principale, chacune de ces même personne .js fichiers sont énumérés un par un dans le ScriptManager?

À L'Intérieur De 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"));

À L'Intérieur Du Site.Maître:

<body>
<form runat="server">
<asp:ScriptManager runat="server">
    <Scripts>
        <%--Framework Scripts--%>
        <asp:ScriptReference Name="MsAjaxBundle" />
        <asp:ScriptReference Name="jquery" />
        <asp:ScriptReference Name="jquery.ui.combined" />
        <asp:ScriptReference Name="WebForms.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebForms.js" />
        <asp:ScriptReference Name="WebUIValidation.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebUIValidation.js" />
        <asp:ScriptReference Name="MenuStandards.js" Assembly="System.Web" Path="~/Scripts/WebForms/MenuStandards.js" />
        <asp:ScriptReference Name="GridView.js" Assembly="System.Web" Path="~/Scripts/WebForms/GridView.js" />
        <asp:ScriptReference Name="DetailsView.js" Assembly="System.Web" Path="~/Scripts/WebForms/DetailsView.js" />
        <asp:ScriptReference Name="TreeView.js" Assembly="System.Web" Path="~/Scripts/WebForms/TreeView.js" />
        <asp:ScriptReference Name="WebParts.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebParts.js" />
        <asp:ScriptReference Name="Focus.js" Assembly="System.Web" Path="~/Scripts/WebForms/Focus.js" />
        <asp:ScriptReference Name="WebFormsBundle" />
        <%--Site Scripts--%>

    </Scripts>
</asp:ScriptManager>

Comme vous pouvez le voir.... chacun de ces même .js fichiers individuellement, sont répertoriés dans le ScriptManager. Je n'ai même pas voir une référence à la "WebFormsJs" bundle qui a été créé n'importe où en dehors de BundleConfig.cs. Pourquoi était-ce bundle jamais créé si chacun de ces fichiers javascript allaient être référencés individuellement ici dans le ScriptManager?

Question 2:
Pourquoi un ScriptManager être utilisé de cette façon à tous? J'étais sous l'impression ScriptManager a été nécessaire pour la version de Microsoft Ajax comme l'utilisation des UpdatePanels. Quel est le but de l'utilisation de ScriptManager ici... simplement pour enregistrer les fichiers javascript?

Question 3:
Quelle est la différence dans l'enregistrement des fichiers javascript à travers le ScriptManager contre en haut du Site.Maître où il utilise la méthode suivante à la place?

<%: Scripts.Render("~/bundles/modernizr") %>

Question 4:
À l'intérieur de la ScriptManager j'ai aussi remarqué ces:

        <asp:ScriptReference Name="MsAjaxBundle" />
        <asp:ScriptReference Name="jquery" />
        <asp:ScriptReference Name="jquery.ui.combined" />

... Je peux au moins reconnaître "MsAjaxBundle" de BundleConfig.cs, mais où sont-jquery et jquery.l'interface utilisateur.combiné défini? J'ai fait une recherche et trouvé une référence à eux dans les packages.config.

<package id="jQuery" version="1.7.1.1" targetFramework="net45" />
<package id="jQuery.UI.Combined" version="1.8.20.1" targetFramework="net45" />

Mais je ne comprends pas ce qui se passe ici. Je pensais que les paquets.config a été utilisé pour NuGet. Plus... je n'ai même pas voir un chemin énumérés ici pour l'emplacement de ces jQuery .js fichiers. Ils sont simplement énumérés ici et étrangement associé à une version particulière de l' .NET Framework (4.5 dans mon cas). Pourquoi un javascript ressource serait associée à une version de l' .NET Framework est au delà de moi.

De toute façon, la question 4: Comment est la ressource "jquery" dans le ScriptManager ajoutée/utilisé? Pourquoi ne puis-je pas voir le jQuery .js fichiers étant regroupés ensemble dans BundleConfig.cs comme tous les autres ballots??

Question 5:
Puis-je supprimer le script suivant de référence à partir du Site.Maître, si je ne suis pas la planification sur l'utilisation de l'UpdatePanel et ces sortes de Microsoft contrôles Ajax? Je suis un peu confus quant à pourquoi c'est même inclus ici par défaut.

<asp:ScriptReference Name="MsAjaxBundle" />

16voto

Hao Kung Points 13035

Mise à JOUR: C'est un nouveau blog qui parle aussi de cette de plus: ASP.NET l'article

Fondamentalement, webforms + groupement ressemble à cela à cause d'un tas de comportement hérité que nous n'étions pas en mesure de changer en scriptmanager.

En ce qui concerne vos questions spécifiques:

  1. Fondamentalement, c'est donc deduping fonctionne correctement, le gestionnaire de script a une limitation pour l'original script de ressources qui les empêche d'être scriptmapped, de sorte qu'ils doivent être mappés sur le disque qui est ensuite correctement deduped parce que les fichiers sont déjà inclus dans le bundle. Le WebformsBundleJs est un mappage de script qui est créé à l'intérieur de la PreAppStart code à l'intérieur de la ScriptManager nupkgs. (Je suis d'accord c'est presque impossible de découvrir)

  2. Nouveau 4.5 fonctionnalités comme la discrète validation requise jquery(via scriptmanager), c'est pourquoi le gestionnaire de script a été utilisé pour assurer jquery ne pas se rendait deux fois.

  3. Cela fonctionne très bien, mais il ne sera jamais à la déduplication avec ScriptManager. Donc, pour modernizr, il ne sera pas un problème.

  4. Le jquery paquets de déposer 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'avez pas besoin/envie, je pense que son coffre-fort à supprimer.

0voto

J'ai eu plus ou moins les mêmes questions aussi...

Cependant en ce qui concerne la question 4, j'ai une opinion différente.

le WebFormsBundle et MsAjaxBundle sont à la fois des références de Script qui ont été définis dans le PreAppStatCode (comme vous, je ne trouve pas où est ce fichier).

Donc, j'ai le sentiment que, dans le même lieu (ScriptManager.WebForms PreAppStartCode) par défaut il y a une autre définition pour jquery et jQueryUI référence de script. Ces références sont utilisées dans le gestionnaire de script.

Ce processus est assez important depuis que, de cette manière vous de prendre avantage de certaines caractéristique importante comme CA etc. Dans la définition de jquery dans le PreAppStartCode pour cette référence spécifique n'est défini CDN chemin qui sera utilisé dans le cas où vous activez le EnableCDN dans le gestionnaire de script de la page principale (EnableCdn="true")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X