stringtranslate.com

Formularios web ASP.NET

ASP.NET Web Forms es un marco de aplicación web y uno de varios modelos de programación compatibles con la tecnología Microsoft ASP.NET . Las aplicaciones de Web Forms se pueden escribir en cualquier lenguaje de programación que admita Common Language Runtime , como C# o Visual Basic . Los principales componentes básicos de las páginas de Web Forms son los controles del servidor , que son componentes reutilizables responsables de representar el marcado HTML y responder a los eventos. [1] Se utiliza una técnica llamada estado de vista para conservar el estado de los controles del servidor entre solicitudes HTTP normalmente sin estado . [2]

Web Forms se incluyó en la versión original de .NET Framework 1.0 en 2002 (consulte el historial de versiones de .NET Framework y el historial de versiones de ASP.NET ), como el primer modelo de programación disponible en ASP.NET. A diferencia de los componentes ASP.NET más nuevos, ASP.NET Core no admite Web Forms . [3]

Características

Las páginas web ASP.NET, conocidas oficialmente como Web Forms, [4] eran los principales componentes básicos para el desarrollo de aplicaciones en ASP.NET antes de la introducción de MVC. [5] Hay dos metodologías básicas para los formularios web: un formato de aplicación web y un formato de sitio web. [6] Las aplicaciones web deben compilarse antes de su implementación, mientras que los sitios web permiten al usuario copiar los archivos directamente al servidor sin compilación previa. Los formularios web están contenidos en archivos con extensión ".aspx"; Estos archivos normalmente contienen marcado HTML estático ( X ) o marcado de componente. El marcado del componente puede incluir controles web del lado del servidor y controles de usuario que se hayan definido en el marco o en la página web. Por ejemplo, un componente de cuadro de texto se puede definir en una página como , que se representa en un cuadro de entrada HTML. Además, el código dinámico, que se ejecuta en el servidor, se puede colocar en una página dentro de un bloque , lo cual es similar a otras tecnologías de desarrollo web como PHP , JSP y ASP . Con ASP.NET Framework 2.0 , Microsoft introdujo un nuevo modelo de código subyacente que permite que el texto estático permanezca en la página .aspx mientras que el código dinámico va a un archivo .aspx.vb o .aspx.cs o .aspx.fs (según el lenguaje de programación utilizado). [7]<asp:textbox id='myid' runat='server'><% -- dynamic code -- %>

Modelo de código subyacente

Microsoft recomienda tratar el código de programa dinámico utilizando el modelo de código subyacente, que coloca este código en un archivo separado o en una etiqueta de secuencia de comandos especialmente designada. Los archivos de código subyacente normalmente tienen nombres como " MyPage.aspx.cs" o " MyPage.aspx.vb", mientras que el archivo de página es MyPage.aspx (el mismo nombre de archivo que el archivo de página (ASPX), pero con la extensión final que indica la página idioma). Esta práctica es automática en Visual Studio y otros IDE , aunque el usuario puede cambiar el nombre de la página de código subyacente. Además, en el formato de aplicación web, pagename.aspx.cs es una clase parcial que está vinculada al archivo pagename.designer.cs. El archivo de diseñador es un archivo que se genera automáticamente desde la página ASPX y permite al programador hacer referencia a componentes en la página ASPX desde la página de código subyacente sin tener que declararlos manualmente, como era necesario en las versiones de ASP.NET anteriores a la versión 2. [ 8] Cuando se utiliza este estilo de programación, el desarrollador escribe código para responder a diferentes eventos, como la página que se carga o un control en el que se hace clic, en lugar de un recorrido de procedimiento del documento.

El modelo de código subyacente de ASP.NET marca una desviación del ASP clásico en el sentido de que anima a los desarrolladores a crear aplicaciones teniendo en cuenta la separación de presentación y contenido . En teoría, esto permitiría a un diseñador web, por ejemplo, centrarse en el marcado de diseño con menos potencial de alterar el código de programación que lo impulsa. Esto es similar a la separación del controlador de la vista en los marcos modelo-vista-controlador (MVC).

Directivas

Una directiva es una instrucción especial sobre cómo ASP.NET debe procesar la página. [9] La directiva más común es <%@ Page %>, que puede especificar muchos atributos utilizados por el analizador y compilador de páginas ASP.NET.

Controles de usuario

Los controles de usuario son encapsulaciones de secciones de páginas que se registran y utilizan como controles en ASP.NET.

Controles personalizados

Los programadores también pueden crear controles personalizados para aplicaciones ASP.NET. A diferencia de los controles de usuario, estos controles no tienen un archivo de marcado ASCX y todo su código está compilado en un archivo de biblioteca de vínculos dinámicos (DLL) . Estos controles personalizados se pueden utilizar en múltiples aplicaciones web y proyectos de Visual Studio 2013 .

Técnica de renderizado

.NET utiliza una técnica de representación de "compuestos visitados". Durante la compilación, el archivo de plantilla (.aspx) se compila en un código de inicialización que crea un árbol de control (el compuesto) que representa la plantilla original. El texto literal va a instancias de la clase de control Literal y los controles del servidor están representados por instancias de una clase de control específica. El código de inicialización se combina con código escrito por el usuario (generalmente mediante el ensamblaje de múltiples clases parciales) y da como resultado una clase específica para la página. La página también funciona como raíz del árbol de control.

Las solicitudes reales de la página se procesan mediante una serie de pasos. Primero, durante los pasos de inicialización, se crea una instancia de la clase de página y se ejecuta el código de inicialización. Esto produce el árbol de control inicial, que ahora normalmente se manipula mediante los métodos de la página en los siguientes pasos. Como cada nodo en el árbol es un control representado como una instancia de una clase, el código puede cambiar la estructura del árbol así como manipular las propiedades/métodos de los nodos individuales. Finalmente, durante el paso de renderizado, se utiliza un visitante para visitar cada nodo del árbol, pidiéndole a cada nodo que se renderice usando los métodos del visitante. La salida HTML resultante se envía al cliente.

Una vez procesada la solicitud, se descarta la instancia de la clase de página y con ella todo el árbol de control. Esta es una fuente de confusión entre los programadores novatos de ASP.NET que dependen de los miembros de la instancia de clase que se pierden con cada ciclo de solicitud/respuesta de página.

Gestión estatal

Las aplicaciones ASP.NET están alojadas en un servidor web y se accede a ellas mediante el protocolo HTTP sin estado . Como tal, si una aplicación utiliza interacción con estado, debe implementar la gestión del estado por sí sola. ASP.NET proporciona varias funciones para la gestión del estado. Conceptualmente, Microsoft trata el "estado" como el estado de la GUI . Pueden surgir problemas si una aplicación debe rastrear el "estado de los datos"; por ejemplo, una máquina de estado finito que puede estar en un estado transitorio entre solicitudes ( evaluación diferida ) o que tarda mucho en inicializarse. La gestión del estado en páginas ASP.NET con autenticación puede dificultar o imposibilitar el web scraping .

Solicitud

El estado de la aplicación lo mantiene una colección de variables compartidas definidas por el usuario. Estos se configuran e inicializan cuando el Application_OnStartevento se activa al cargar la primera instancia de la aplicación y están disponibles hasta que sale la última instancia. Se accede a las variables de estado de la aplicación mediante la Applicationscolección, que proporciona un contenedor para el estado de la aplicación. Las variables de estado de la aplicación se identifican por su nombre. [10] La aplicación es la gestión estatal.

Estado de sesión

El estado de la sesión del lado del servidor lo mantiene una colección de variables de sesión definidas por el usuario que son persistentes durante una sesión de usuario. Estas variables, a las que se accede mediante la Sessioncolección, son únicas para cada instancia de sesión. Las variables se pueden configurar para que se destruyan automáticamente después de un tiempo definido de inactividad, incluso si la sesión no finaliza. La sesión del usuario del lado del cliente se mantiene mediante una cookie o codificando el ID de la sesión en la propia URL. [10]

ASP.NET admite tres modos de persistencia para variables de sesión del lado del servidor: [10]

Modo en proceso
Las variables de sesión se mantienen dentro del proceso ASP.NET . Ésta es la forma más rápida; sin embargo, en este modo las variables se destruyen cuando el proceso ASP.NET se recicla o se cierra.
Modo de servidor de estado
ASP.NET ejecuta un servicio de Windows independiente que mantiene las variables de estado. Debido a que la administración del estado ocurre fuera del proceso ASP.NET y debido a que el motor ASP.NET accede a los datos mediante .NET Remoting, ASPState es más lento que In-Process. Este modo permite equilibrar la carga de una aplicación ASP.NET y escalarla en varios servidores. Debido a que el servicio de administración de estado se ejecuta independientemente de ASP.NET, las variables de sesión pueden persistir durante los cierres de procesos de ASP.NET. Sin embargo, dado que el servidor de estado de sesión se ejecuta como una instancia, sigue siendo un punto de falla para el estado de sesión. El servicio de estado de sesión no puede equilibrar la carga y existen restricciones sobre los tipos que se pueden almacenar en una variable de sesión.
Modo de servidor SQL
Las variables de estado se almacenan en una base de datos , lo que permite que las variables de sesión persistan durante los cierres de procesos de ASP.NET. La principal ventaja de este modo es que permite que la aplicación equilibre la carga en un clúster de servidores, compartiendo sesiones entre servidores. Este es el método más lento de gestión del estado de sesión en ASP.NET.

El estado de sesión de ASP.NET le permite almacenar y recuperar valores para un usuario mientras este navega por páginas ASP.NET en una aplicación web. HTTP es un protocolo sin estado. Esto significa que un servidor web trata cada solicitud HTTP de una página como una solicitud independiente. El servidor no conserva ningún conocimiento de los valores de las variables que se utilizaron durante solicitudes anteriores. El estado de sesión de ASP.NET identifica las solicitudes del mismo navegador durante un período de tiempo limitado como sesión y proporciona una manera de conservar los valores de las variables durante la duración de esa sesión. De forma predeterminada, el estado de la sesión ASP.NET está habilitado para todas las aplicaciones ASP.NET.

Las alternativas al estado de sesión incluyen las siguientes:

Ver estado

El estado de vista se refiere al mecanismo de administración del estado a nivel de página, utilizado por las páginas HTML emitidas por las aplicaciones ASP.NET para mantener el estado de los controles y widgets del formulario web . El estado de los controles se codifica y se envía al servidor cada vez que se envía un formulario en un campo oculto conocido como __VIEWSTATE. El servidor devuelve la variable para que, cuando se vuelva a representar la página, los controles se muestren en su último estado. En el lado del servidor, la aplicación puede cambiar el estado de visualización, si el procesamiento requiere un cambio de estado de algún control. Los estados de los controles individuales se decodifican en el servidor y están disponibles para su uso en páginas ASP.NET que utilizan la ViewStatecolección. [11]

El uso principal de esto es preservar la información del formulario en las devoluciones de datos. El estado de visualización está activado de forma predeterminada y normalmente serializa los datos en cada control de la página, independientemente de si realmente se utilizan durante una devolución de datos. Sin embargo, este comportamiento puede (y debe) modificarse, ya que el estado de vista se puede deshabilitar por control, por página o en todo el servidor.

Los desarrolladores deben tener cuidado al almacenar información confidencial o privada en el estado Ver de una página o control, ya que la cadena Base64 que contiene los datos del estado de la vista se puede deserializar fácilmente. De forma predeterminada, Ver estado no cifra el __VIEWSTATEvalor. El cifrado se puede habilitar en todo el servidor (y en un servidor específico), lo que permite mantener un cierto nivel de seguridad. [12]

Almacenamiento en caché del lado del servidor

ASP.NET ofrece un objeto "Caché" que se comparte en toda la aplicación y también se puede utilizar para almacenar varios objetos. El objeto "Caché" guarda los datos sólo durante un período de tiempo específico.

Otro

Otros medios de administración de estado que admite ASP.NET son las cookies , el almacenamiento en caché y la cadena de consulta .

Motor de plantillas

Cuando se lanzó por primera vez, ASP.NET carecía de un motor de plantillas . Debido a que .NET Framework está orientado a objetos y permite la herencia , muchos desarrolladores definirían una nueva clase base que hereda de " System.Web.UI.Page", escribirían allí métodos que representen HTML y luego harían que las páginas de su aplicación hereden de esta nueva clase. Si bien esto permite reutilizar elementos comunes en un sitio, agrega complejidad y combina el código fuente con el marcado . Además, este método sólo puede probarse visualmente ejecutando la aplicación, no mientras la diseña. Otros desarrolladores han utilizado archivos de inclusión y otros trucos para evitar tener que implementar la misma navegación y otros elementos en cada página.

ASP.NET 2.0 introdujo el concepto de páginas maestras , que permiten el desarrollo de páginas basadas en plantillas . Una aplicación web puede tener una o más páginas maestras que, a partir de ASP.NET 2.0, pueden anidarse. [13] Las plantillas maestras tienen controles de marcador de posición, llamados ContentPlaceHolders para indicar dónde va el contenido dinámico, así como HTML y JavaScript compartidos entre páginas secundarias.

Las páginas secundarias utilizan esos controles ContentPlaceHolder, que deben asignarse al marcador de posición de la página maestra que completa la página de contenido. El resto de la página está definido por las partes compartidas de la página maestra, muy parecido a una combinación de correspondencia en un procesador de textos . Todos los controles de servidor y marcado en la página de contenido deben colocarse dentro del control ContentPlaceHolder.

Cuando se realiza una solicitud para una página de contenido, ASP.NET fusiona el resultado de la página de contenido con el resultado de la página maestra y envía el resultado al usuario.

La página maestra permanece totalmente accesible para la página de contenido. Esto significa que la página de contenido aún puede manipular encabezados, cambiar títulos, configurar el almacenamiento en caché, etc. Si la página maestra expone propiedades o métodos públicos (por ejemplo, para configurar avisos de derechos de autor), la página de contenido también puede usarlos.

Otros archivos

Otras extensiones de archivo asociadas con diferentes versiones de ASP.NET incluyen:

Estructura del directorio

En general, la estructura del directorio ASP.NET puede determinarse según las preferencias del desarrollador. Aparte de algunos nombres de directorios reservados, el sitio puede abarcar cualquier número de directorios. La estructura suele reflejarse directamente en las URL. Aunque ASP.NET proporciona medios para interceptar la solicitud en cualquier momento durante el procesamiento, el desarrollador no está obligado a canalizar las solicitudes a través de una aplicación central o un controlador frontal.

Los nombres de directorio especiales (a partir de ASP.NET 2.0) son: [16]

Código_aplicación
Este es el directorio de "código sin formato". El servidor ASP.NET compila automáticamente archivos (y subdirectorios) en esta carpeta en un ensamblado accesible en el código de cada página del sitio. App_Code se utiliza normalmente para código de abstracción de acceso a datos, código de modelo y código comercial. Además, todos los controladores y módulos http específicos del sitio y la implementación del servicio web se encuentran en este directorio. Como alternativa al uso de App_Code, el desarrollador puede optar por proporcionar un ensamblado independiente con código precompilado.
Datos_aplicación
El directorio App_Data ASP.NET es el directorio predeterminado para cualquier base de datos utilizada por el sitio web ASP.NET. Estas bases de datos pueden incluir archivos de Access (mdb) o archivos de SQL Server (mdf). App_Data es el único directorio con acceso de escritura habilitado para la aplicación web ASP.NET: [17]
App_GlobalResources
Contiene archivos resx con recursos localizados disponibles para cada página del sitio. Aquí es donde el desarrollador de ASP.NET normalmente almacena mensajes localizados, etc. utilizados en más de una página.
App_LocalResources
Por ejemplo, un archivo llamado CheckOut.aspx.fr-FR.resx contiene recursos localizados para la versión francesa de la página CheckOut.aspx. Cuando la cultura de la interfaz de usuario está configurada en francés, ASP.NET busca y utiliza automáticamente este archivo para la localización.
App_Offline.htm
Un archivo (no un directorio) que deshabilita la aplicación devolviendo el contenido del archivo para cualquier solicitud de la aplicación.
Temas de aplicaciones
Agrega una carpeta que contiene archivos relacionados con temas, que es una nueva característica de ASP.NET que ayuda a garantizar una apariencia consistente en todo un sitio web y facilita cambiar la apariencia del sitio web cuando sea necesario.
App_WebReferencias
contiene archivos de descubrimiento y archivos WSDL para referencias a servicios web que se consumirán en el sitio.
Papelera
Contiene código compilado ( archivos .dll ) para controles, componentes u otro código al que desee hacer referencia en su aplicación. Cualquier clase representada por código en la carpeta Bin se hace referencia automáticamente en su aplicación.

Actuación

ASP.NET busca obtener beneficios de rendimiento sobre otras tecnologías basadas en scripts (incluido ASP clásico) al compilar el código del lado del servidor la primera vez que se utiliza en uno o más archivos DLL en el servidor web . Estos archivos o ensamblados dll contienen Microsoft Intermediate Language (MSIL) para ejecutarse dentro de Common Language Runtime ; esto proporciona un aumento de rendimiento sobre los lenguajes de script puro y es similar al enfoque utilizado por Python y no muy diferente de JavaServer Pages . [18] Esta compilación ocurre automáticamente la primera vez que se solicita una página (lo que significa que el desarrollador no necesita realizar un paso de compilación separado para las páginas).

Esta característica proporciona la facilidad de desarrollo que ofrecen los lenguajes de programación con los beneficios de rendimiento de un binario compilado. Sin embargo, la compilación puede causar un retraso notable pero breve para el usuario cuando la página recién editada se solicita por primera vez desde el servidor web, pero no nuevamente a menos que la página solicitada se actualice más.

El ASPX y otros archivos de recursos se colocan en un host virtual en un servidor de Internet Information Services (u otros servidores ASP.NET compatibles; consulte Otras implementaciones a continuación). La primera vez que un cliente solicita una página, .NET Framework analiza y compila los archivos en un ensamblado .NET y envía la respuesta; Las solicitudes posteriores se atienden desde los archivos DLL. De forma predeterminada, ASP.NET compila todo el sitio en lotes de 1000 archivos tras la primera solicitud. Si el retraso en la compilación está causando problemas, es posible que se modifique el tamaño del lote o la estrategia de compilación.

Los desarrolladores también pueden optar por precompilar sus archivos de "código subyacente" antes de la implementación, utilizando Microsoft Visual Studio, eliminando la necesidad de una compilación justo a tiempo en un entorno de producción. [19] Esto también elimina la necesidad de tener el código fuente en el servidor web. También admite texto precompilado.

ASP.NET comparado con ASP clásico

ASP.NET WebForms simplifica la transición de los desarrolladores del desarrollo de aplicaciones de Windows al desarrollo web al ofrecer la capacidad de crear páginas compuestas de controles similares a una interfaz de usuario de Windows . Un control web, como un botón o una etiqueta , funciona de forma muy parecida a sus homólogos de Windows: el código puede asignar sus propiedades y responder a sus eventos. Los controles saben cómo representarse a sí mismos: mientras que los controles de Windows se dibujan a sí mismos en la pantalla, los controles web producen segmentos de HTML y JavaScript que forman parte de la página resultante enviada al navegador del usuario final.

ASP.NET WebForms anima al programador a desarrollar aplicaciones utilizando un modelo GUI controlado por eventos , en lugar de entornos de secuencias de comandos web convencionales como ASP y PHP . El marco combina tecnologías existentes como JavaScript con componentes internos como " ViewState " para llevar el estado persistente (entre solicitudes) al entorno web inherentemente sin estado .

Otras diferencias respecto al ASP clásico son:

Referencias

Citas

  1. ^ "¿Qué son los formularios web?". docs.microsoft.com .
  2. ^ "Descripción general del estado de vista de ASP.NET". msdn.microsoft.com .
  3. ^ "Elija entre ASP.NET y ASP.NET Core". docs.microsoft.com .
  4. ^ Personal (noviembre de 2001). "Descripción general de ASP.NET y formularios web". Microsoft . Consultado el 5 de junio de 2011 .
  5. ^ (MacDonald y Szpuszta 2005, pág.63)
  6. ^ "Proyectos de aplicaciones web versus proyectos de sitios web en Visual Studio".
  7. ^ "Código subyacente versus código en línea". Microsoft.NET Framework . Microsoft . Archivado desde el original el 11 de noviembre de 2010 . Consultado el 22 de noviembre de 2010 .
  8. ^ "aspx.designer.cs ¿cómo funciona?". Desbordamiento de pila . 10 de septiembre de 2015.
  9. ^ "Descripción general de la sintaxis de la página web ASP.NET". Microsoft.NET Framework . Microsoft . Consultado el 22 de noviembre de 2010 .
  10. ^ abc "INFO: descripción general de la administración del estado de ASP.NET" . Consultado el 23 de octubre de 2007 .
  11. ^ "ViewState en ASP.NET". Archivado desde el original el 14 de octubre de 2007 . Consultado el 23 de octubre de 2007 .
  12. ^ "Cifrado de Viewstate en ASP.NET" . Consultado el 19 de julio de 2009 .
  13. ^ "Páginas maestras de ASP.NET". microsoft.com . Microsoft.
  14. ^ "Sintaxis de Global.asax". microsoft.com . Microsoft.
  15. ^ "Convertir un control de usuario .ascx en un control personalizado redistribuible". microsoft.com . Microsoft.
  16. ^ "Estructura de carpetas del proyecto web ASP.NET". microsoft.com . Microsoft.
  17. ^ "Estructura de directorios ASP.NET". aspnet4.com .
  18. ^ (MacDonald y Szpuszta 2005, págs. 7-8)
  19. ^ "Descripción general de la precompilación del proyecto del sitio web ASP.NET: realización de la precompilación". Red de desarrolladores de Microsoft . Consultado el 13 de enero de 2016 .

Fuentes

Enlaces externos