Rob Howard
Cuando era niño, pasaba algunas semanas cada año saliendo con mi familia extendida. Cuando era un joven estadounidense, me fascinaban los trenes eléctricos holandeses, algo que nunca había visto en mi ciudad natal de Dallas, Texas. Mis primos me invitaron a dar un paseo en su barco para ver pasar el tren. Sentado en el agua cerca de la vía, puedes escuchar el tren que se acerca, como un suave silbido a través de la vía, hasta que alcanza un lento clímax cuando el tren pasa. No pude evitar recordar esto cuando pienso en ASP.NET 2.0. ASP.NET 2.0 está muy cerca y la mayoría de nosotros estamos anticipando ansiosamente su lanzamiento lo suficientemente pronto como para escuchar el "woo" de que el lanzamiento continúa haciéndose cada vez más fuerte. Entonces la forma en que escribimos software cambiará, una vez más.
El objetivo de ASP.NET 2.0 de Microsoft es proporcionar a los desarrolladores un rendimiento del 50%. Sin embargo, las mejoras reales en el rendimiento parecen superar las expectativas. Las nuevas funciones de personalización, membresía y administración de roles alivian la carga de los desarrolladores, mientras que otras funciones, como el enlace de datos, también se simplifican. Por ejemplo, la sintaxis familiar y aún compatible:
<%# DataBinder.Eval (Container.DataItem, "FirstName") %>
En ASP.NET 2.0 se puede simplificar a:
<%# Eval("FirstName") %>
No solo hay un montón de características nuevas impresionantes, sino que también hay un montón de controles de servidor significativos. El modelo de programación ASP.NET será aún más poderoso en ASP.NET 2.0 debido a la integración de la membresía con controles de servidor como el control <ASP:login> y nuevos controles de servidor de fuente de datos y control de datos.
El número de bibliotecas de clases System.Web casi se ha duplicado en ASP.NET 2.0: tanta cobertura que incluso requiere una columna de revista. Para comprender verdaderamente el alcance de estos cambios, necesitará un nuevo libro sobre ASP.NET 2.0. Planeo escribir algunas columnas aquí para resaltar algunas de las características nuevas más importantes de ASP.NET 2.0. Este mes me centraré en la navegación y el flujo de páginas, comenzando con una característica muy buscada: la capacidad de enviar contenido a otras páginas.
Entrega entre páginas
La mayor queja que escucho de los desarrolladores que migran a ASP.NET es que el modelo de devolución de datos de la página ASP.NET puede tener un único <formulario> y solo pueden enviarse mensajes HTTP a sí mismos, por lo que todo el procesamiento se ejecutará. esta página.
Muchos desarrolladores, especialmente aquellos que están familiarizados con ASP y les gusta controlar el elemento <form>, sabrán que en ASP se puede indicar al <form> dónde y cómo enviar sus datos de contenido (HTTP Post o HTTP Get), y el misma página La cantidad de <formulario>. Pero en comparación con ASP, ASP.NET solo permite que una página tenga un solo <form runat=server> y solo se puede publicar en sí misma. Esto puede resultar muy frustrante. A continuación se muestra un ejemplo de lo que se envía a otras páginas en ASP.NET 2.0:
<%@ Page MasterPageFile="~/Site.master" Language="C#"
CodeFile="Fuente.aspx.cs"
Hereda="Fuente" %>
<ASP:ID de contenido="Contenido principal"
ContentPlaceHolderID="Principal" Runat="servidor">
Introduce tu nombre:
<ASP:TextBox ID="NameBox" Runat="servidor"></ASP:TextBox>
<ASP:ID de botón="Botón1" Runat="servidor" Texto="Enviar" />
</ASP:Contenido>
Las páginas maestras se utilizan para controlar el diseño de la página, con un bloque <ASP:content> y algunos controles del servidor para aceptar la entrada del usuario.
Si planea pasar contenido a otra página, puede usar un código de servidor similar al siguiente:
Response.Redirect("Target.aspx?Name= " +
HttpUtility.UrlEncode(NameBox.Text));
El problema con esta tecnología es que cuando el usuario hace clic en el botón para enviar, el servidor acepta la solicitud y envía una respuesta para redirigir el navegador a Target.aspx. ¡Un problema tan simple ha generado mucho trabajo!
¿Se puede simplificar el trabajo? En ASP.NET 2.0 la respuesta es sí. A continuación, demuestre el código mejorado:
<%@ Page MasterPageFile="~/Site.master" Language="C#"
CodeFile="Fuente.aspx.cs"
Hereda="Fuente" %>
<ASP:ID de contenido="Contenido principal"
ContentPlaceHolderID="Principal" Runat="servidor">
Introduce tu nombre:
<ASP:TextBox ID="NameBox" Runat="servidor"></ASP:TextBox>
<ASP:ID de botón="Botón1" Runat="servidor" Texto="Enviar"
PostBackUrl="~/Target.aspx" />
</ASP:Contenido>
Tenga en cuenta el atributo PostBackUrl en <ASP:Button>. Este atributo le indica al botón que no realice la devolución de datos predeterminada sino que envíe datos directamente a Target.aspx.
Quizás se pregunte cómo funciona esto, especialmente si está familiarizado con ASP.NET ViewState. objeto. Pero eso está más allá del alcance de este artículo. Cuando se utiliza la función de entrega entre páginas, se agregará un nuevo campo oculto a la página:
<input type="hidden" name="__PREVIOUSPAGE" id="__PREVIOUSPAGE"
valor="p1-dFHlCpgH2alr1vkr3G21UIR7jOuzn074led6lbGf1KQ47_F25GwG0" />
Es un poco como el estado de vista generado por el árbol de control, pero es un fragmento del estado de vista que valida la página para la entrega entre páginas. Ya sabes, cuando una página se publica de forma cruzada en otra página, la página receptora debe poder acceder a la instancia de la página de publicación. En este caso significa que Target.ASP puede acceder a los detalles de Source.aspx. De hecho, un enfoque más eficiente es acceder a la API desde Source.aspx a Target.aspx a través de un administrador fuertemente tipado. Para acceder a la página de entrega (página anterior), ASP.NET2.0 proporciona un atributo de página para la entrega entre páginas: PreviousPage.
PreviousPage devuelve la instancia de la página de entrega y también hay una propiedad que se utiliza para verificar si se trata de una entrega entre páginas: IsCrossPagePostBack. Esta propiedad es similar a IsPostBack existente, pero devuelve verdadero solo si se produce una publicación entre páginas.
La propiedad PreviousPage puede comportarse de manera diferente. El valor predeterminado simplemente devuelve una instancia de la página anterior como un tipo de página. Sin embargo, al usar una nueva directiva, puede hacer que la propiedad PreviousPage devuelva una instancia fuertemente tipada para acceder a los miembros públicos de la página. Por ejemplo, agregue el siguiente código a Target.aspx:
<%@ PreviousPageType VirtualPath="~/Source.aspx" %>
Ahora puede usar la propiedad PreviousPage en Target.aspx para acceder a los datos de Source.aspx. Sin embargo, para acceder a un control de servidor, como NameBox en Source.aspx, también necesita escribir el siguiente código:
TextBox nameBox = PreviousPage.FindControl("NameBox") as TextBox
En otras palabras, debe usar FindControl para
;acceder al árbol de control. ¿Por qué los controles del servidor utilizan de forma predeterminada variables miembro protegidas? Para tener un acceso verdaderamente simple a los elementos de la página anterior, debe exponer la propiedad o el método en Source.aspx como público y luego funcionará el siguiente código: TextBox nameBox. = PreviousPage. NameBox;
la entrega entre páginas es una gran característica de ASP.NET. Hay algunos artículos que analizan en profundidad los detalles técnicos de la entrega entre páginas. Consulte el corte de Dino Esposito en la edición de septiembre de la columna Edge de MSDN Magazine (consulte mi traducción: Formulario ASP.NET (traducción)). También es probable que descubra que, si domina ASP.NET, seguirá utilizando el modelo de devolución de datos de página estándar la mayor parte del tiempo. (Traductor: la implicación es que si es un experto, desdeñará esta característica)
El control del asistente
puede crear fácilmente una función de navegación compleja para la aplicación mediante la entrega entre páginas. Sin embargo, esta característica no facilita la creación de interfaces de usuario estilo asistente. Las interfaces de usuario de estilo asistente, ya sean lineales o no lineales, suelen estar diseñadas para realizar tareas. Proporciona a los usuarios finales una forma fácil de completar una serie compleja de pasos, cada uno de los cuales se divide en partes.
En ASP.NET 1.x, los asistentes a menudo se implementaban usando algunos trucos: colocar múltiples controles de servidor <ASP:panel> en la misma página y cambiar la visibilidad según la ubicación del usuario. Escribir un asistente en ASP.NET no es una tarea fácil. Muchos diseñadores abandonan el asistente y la gestión del proceso de pasos también es confusa.
Las nuevas capacidades de entrega entre páginas en ASP.NET se pueden utilizar para resolver el problema del asistente, pero también es un desafío cuando se requiere navegación no lineal. Por ejemplo, paso 1, paso 2, omita los pasos 3 a 5, paso 6, paso 3, paso 2, paso 6, el control del asistente ASP.NET 2.0 resuelve la mayoría de estos problemas. Además, se puede acceder continuamente a todos los elementos de entrada del asistente de entrega entre páginas a través del modelo de devolución de datos de la página.
La funcionalidad del control del asistente es muy similar a la forma de ocultar paneles en ASP.NET 1.1. Sin embargo, el control del asistente expone una serie de <ASP:WizardStep>, que puede contener cualquier número de controles secundarios. Sin embargo, cada <ASP:WizardStep> debe tener su propio ID único; consulte la Figura 1. La página de control del asistente gestiona toda la navegación, admite navegación lineal y no lineal y tiene soporte completo en tiempo de diseño. La Figura 2 muestra el control del asistente. El lado izquierdo es la navegación no lineal basada en enlaces y el lado inferior derecho es la navegación con botones lineales. En el menú de tareas que se abre, puede ver no solo una tarea común sino también una lista de pasos que permiten cambiar entre pasos en tiempo de diseño.
Figura 2 Asistente en Visual Studio
Todos los elementos visibles del control del asistente son configurables. Los enlaces no lineales se pueden reemplazar por botones o eliminar entradas, y los elementos de navegación lineal anterior, siguiente y completado también se pueden cambiar a botones o enlaces de imágenes. De hecho, todos los aspectos del control se pueden configurar mediante plantillas.
Una de las dificultades al escribir controles de asistente en ASP.NET 1.1 fue administrar dónde debería estar el usuario. El control del asistente simplifica esta tarea al exponer la propiedad ActiveStep. La propiedad ActiveStep puede consultar y determinar qué paso está activo actualmente. El flujo natural del asistente continuará según lo declarado por la implementación y el flujo se puede cambiar en cualquier momento mediante el método MoveTo. A través de MoveTo, cualquier paso se puede configurar como ActiveStep. Para ayudar en la navegación y el proceso, también se proporcionan varios eventos, consulte la Figura 3.
El nuevo control del asistente es muy útil al recopilar información del usuario. No desea escribir todas las estructuras básicas en ASP.NET 1.1. ASP.NET ha hecho todo el trabajo por usted. El control del asistente es tan útil que el equipo de ast.net lo usa como clase base para el control CreateUserWizard, que se usa para crear usuarios como parte de la función de Membresía.
Las secciones
Publicación entre páginas y el control <ASP:Wizard> brindan a los desarrolladores de ASP.NET varias opciones nuevas para controlar el flujo de navegación en sus aplicaciones. La entrega entre páginas es útil en situaciones en las que actualmente necesita utilizar Response.Redirect o Server.Transfer. Los controles del asistente son excelentes para crear colecciones de datos complejas que requieren una recopilación de datos tanto lineal como no lineal.
-------------------------------------------------- ------
Figura 1 Pasos del asistente
<ASP:Wizard runat="server" >
<Pasos del asistente>
<ASP:WizardStep ID="Paso1">
¡Bienvenido!
</ASP:paso del asistente>
<ASP:WizardStep ID="Paso2">
¿Cuál es tu nombre? [TextBox1]
[Botón1]
</ASP:paso del asistente>
<ASP:WizardStep ID="Paso3">
¡Gracias, [TextBox1.Text]!
</ASP:paso del asistente>
</Pasos del Asistente>
</ASP:Asistente>
-------------------------------------------- --- ----------
Figura 3 Eventos de navegación
Descripción | del evento |
---|---|
ActiveStepChanged | Se genera cuando ActiveStep está configurado en un nuevo WizardStep |
CancelButtonClick | Se genera cuando se hace clic en el botón identificado como Cancelar |
FinishButtonClick | Se genera cuando se hace clic en el botón identificado como Finalizar |
NextButtonClick | Se genera cuando se identifica el botón Siguiente se hace clic en el botón |
PreviousButtonClick | Se levanta cuando se hace clic en el botón identificado como botón Anterior |
SideBarButtonClick | Se levanta cuando se hace clic en uno de los enlaces o botones de la barra lateral |