asp.net - una - VS2012-Formularios web-Confusión de paquetes
paginas web asp.net ejemplos (3)
Creé un nuevo ASP.NET Web Forms Project a través de Visual Studio 2012. Desafortunadamente, el archivo Site.Master predeterminado es muy confuso. (Estoy publicando estas preguntas porque están muy relacionadas y hacen referencia al mismo código bastante).
En primer lugar, ya entiendo el propósito de la agrupación y la minificación, por lo que no es necesario discutir eso. Sin embargo, no entiendo qué sucede con la forma en que se están incluyendo los scripts en la página maestra predeterminada.
Pregunta 1:
¿Por qué se crea un paquete llamado "~ / bundles / WebFormsJs" en el archivo BundleConfig.cs, y aún en la página maestra, cada uno de estos mismos archivos .js individuales se enumeran uno por uno en el ScriptManager?
Dentro 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"));
Sitio interno. Maestro:
<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>
Como puede ver ... cada uno de esos mismos archivos .js se enumeran individualmente en ScriptManager. Ni siquiera veo una referencia al paquete "WebFormsJs" que se creó en cualquier lugar fuera de BundleConfig.cs. ¿Por qué se creó ese paquete si cada uno de estos archivos javascript fuera referenciado individualmente aquí en ScriptManager?
Pregunta 2:
¿Por qué se usa un ScriptManager de esta manera? Tenía la impresión de que se requería ScriptManager para la versión de Ajax de Microsoft, como el uso de UpdatePanels. ¿Cuál es el propósito de usar ScriptManager aquí ... simplemente para registrar archivos JavaScript?
Pregunta 3:
¿Cuál es la diferencia en el registro de archivos JavaScript a través del ScriptManager versus en la parte superior de Site.Master en lugar de utilizar el siguiente enfoque?
<%: Scripts.Render("~/bundles/modernizr") %>
Pregunta 4:
Dentro del ScriptManager también noté esto:
<asp:ScriptReference Name="MsAjaxBundle" />
<asp:ScriptReference Name="jquery" />
<asp:ScriptReference Name="jquery.ui.combined" />
... Al menos puedo reconocer "MsAjaxBundle" de BundleConfig.cs, pero ¿dónde están definidos jquery y jquery.ui.combined? Hice una búsqueda y encontré una referencia a ellos en packages.config.
<package id="jQuery" version="1.7.1.1" targetFramework="net45" />
<package id="jQuery.UI.Combined" version="1.8.20.1" targetFramework="net45" />
Pero tampoco entiendo lo que está pasando aquí. Pensé que packages.config se usaba para NuGet. Además ... Ni siquiera veo una ruta en esta lista para la ubicación de estos archivos jQuery .js. Se enumeran aquí y están extrañamente asociados con una versión particular de .NET Framework (4.5 en mi caso). Por qué un recurso de javascript estaría asociado con una versión de .NET Framework me supera.
De todos modos, la pregunta 4 es esta: ¿cómo se agrega / usa el recurso "jquery" en el ScriptManager? ¿Por qué no veo los archivos jQuery .js agrupados en BundleConfig.cs como todos los otros paquetes?
Pregunta 5:
¿Puedo eliminar la siguiente referencia de script de Site.Master si no planeo usar UpdatePanel y ese tipo de controles Ajax de Microsoft? Estoy un poco confundido sobre por qué esto incluso está incluido aquí por defecto.
<asp:ScriptReference Name="MsAjaxBundle" />
Solo para aclarar algo de la explicación de aceptar respuesta para la Pregunta 1:
El motivo de las referencias de script para los archivos js de formularios web individuales es permitir que los archivos locales (como "~ / Scripts / WebForms / WebForms.js") anulen los mismos archivos que existen en System.Web.dll (si usted refleja el System.Web.dll y mira en la carpeta de referencias encontrará los mismos archivos .js).
Tenía más o menos las mismas preguntas también ...
Sin embargo, con respecto a la pregunta 4 tengo una opinión diferente.
WebFormsBundle y MsAjaxBundle son ambas referencias de Script que se han definido en PreAppStatCode (como usted, no puedo encontrar dónde está este archivo).
Por lo tanto, tengo la sensación de que en el mismo lugar (ScriptManager.WebForms PreAppStartCode) por defecto hay otra definición para la referencia del script jquery y jQueryUI. Estas referencias se usan en el administrador de scripts.
Este proceso es bastante importante ya que de esta manera se aprovecha una característica importante como CDN, etc. En la definición de jquery en PreAppStartCode para esta referencia específica, hay una ruta definida de CDN que se usará en caso de que active el EnableCDN en el administrador de scripts de su página maestra (EnableCdn = "true")
ACTUALIZACIÓN: Esta es una nueva publicación de blog que también habla de esto más: artículo de ASP.NET
Básicamente webforms + bundling se ve así debido a un montón de comportamiento heredado que no pudimos cambiar en scriptmanager.
En lo que respecta a sus preguntas específicas:
Básicamente esto es para que la deduplicación funcione correctamente, el administrador de scripts tiene una limitación para los recursos de scripts originales que les impide crear un mapa de comandos, por lo que deben asignarse al disco, que luego se deduce correctamente porque los archivos ya están incluidos en el paquete. WebformsBundleJs es una asignación de scripts que se crea dentro del código PreAppStart dentro de los nupkgs de ScriptManager. (Estoy de acuerdo en que esto es casi imposible de descubrir)
Las nuevas características 4.5 como la validación discreta requieren jquery (a través de scriptmanager), que es la razón por la cual se utilizó el administrador de scripts para asegurar que jquery no se renderice dos veces.
Esto funcionará bien, pero nunca se deducirá con ScriptManager. Entonces, para modernizr no será un problema.
Los paquetes jquery colocan los archivos jquery en el disco en su carpeta de Scripts.
Esa referencia extrae el msajaxbundle que contiene todos los scripts ajax, si no los necesita / los quiere, creo que es seguro eliminarlos.