En las aplicaciones ASP.NET, hay muchas formas de navegar entre formularios web: usando hipervínculos, usando Response.Redirect, usando Server.Transfer o usando Server.Execute. Este artículo analizará las similitudes, diferencias y ventajas y desventajas de estos cuatro métodos de navegación para ayudarlo a elegir el mejor método de navegación.
1. Hipervínculo
La forma más sencilla de ingresar otro formulario desde un formulario es usar el control de hipervínculo HTML. En un formulario web, utilice la clase de código HTML de hipervínculos como:
<a href="WebForm2.aspx">Ingrese el formulario 2</a>
Cuando el usuario hace clic en el hipervínculo, se ejecuta WebForm2.aspx y el resultado se envía a el navegador. La navegación mediante hipervínculos se puede utilizar en casi cualquier lugar, incluidas páginas HTML y páginas ASP normales. ASP.NET también proporciona otro método alternativo, el control del servidor HyperLink:
<form id="Form1" método="post" runat="server">
<asp:HyperLink id="HyperLink1" runat=" server"
NavigateUrl="WebForm2 .aspx">Ingrese el formulario 2</asp:HyperLink>
</form>
El resultado de ejecución del código HTML anterior es el mismo que el del primer ejemplo, porque ASP.NET trata el control del servidor web HyperLink como un control de supervínculo HTML. Pero hay una diferencia importante entre los dos. Los controles del servidor web HyperLink se pueden programar en el lado del servidor. Específicamente, su propiedad NavigateUrl se puede cambiar en el código del programa, lo que permite la construcción de hipervínculos cuyos objetivos específicos pueden cambiar dinámicamente según el estado actual de la aplicación, por ejemplo:
Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click
HyperLink1.NavigateUrl = "WebForm3.aspx"
End Sub
Después de ejecutar este código, si el usuario hace clic en el enlace, verá WebForm3.aspx en lugar de WebForm2.aspx.
2. Utilice un programa para controlar la redirección.
Aunque los hipervínculos pueden navegar de una página a otra, este método de navegación está completamente controlado por el usuario. A veces, es posible que necesitemos usar código para controlar todo el proceso de navegación, incluido cuándo ir a otra página. En estas situaciones, ASP.NET tiene tres formas diferentes de lograr propósitos similares: llamar al método Redirect del objeto Response y llamar al método Transfer o Execute del objeto Server. El comportamiento de estos tres métodos de navegación es básicamente similar, pero existen diferencias.
2.1 Response.Redirect
El método Response.Redirect hace que el navegador se vincule a una URL específica. Cuando se llama al método Response.Redirect(), crea una respuesta con el código de estado 302 (que indica que el objetivo ha cambiado) y la nueva URL de destino en los encabezados de respuesta. El navegador recibe la respuesta del servidor y utiliza la información del encabezado de respuesta para emitir una solicitud de la nueva URL.
Es decir, cuando se utiliza el método Response.Redirect, la operación de redireccionamiento ocurre en el lado del cliente e involucra un total de dos comunicaciones con el servidor (dos viajes de ida y vuelta): la primera es una solicitud de la página original, que obtiene un respuesta 302, y la segunda La segunda vez es solicitar la nueva página declarada en la respuesta 302 y obtener la página después de la redirección.
2.2 Server.Transfer
El método Server.Transfer transfiere el flujo de ejecución del archivo ASPX actual a otra página ASPX en el mismo servidor. Cuando se llama a Server.Transfer, la ejecución de la página ASPX actual finaliza y el flujo de ejecución se transfiere a otra página ASPX, pero la nueva página ASPX todavía usa el flujo de respuesta creado por la página ASPX anterior.
Si utiliza el método Server.Transfer para navegar entre páginas, la URL en el navegador no cambiará, porque la redirección se realiza completamente en el lado del servidor y el navegador no sabe que el servidor ha realizado un cambio de página.
De forma predeterminada, el método Server.Transfer no pasa datos de formulario ni cadenas de consulta de una página a otra, pero siempre que el segundo parámetro del método esté establecido en Verdadero, los datos del formulario de la primera página se pueden conservar y consultar. cadena.
Al mismo tiempo, se debe tener en cuenta una cosa al usar Server.Transfer: la página de destino utilizará el flujo de respuesta creado por la página original, lo que hace que la verificación de autenticación de la máquina (MAC) de ASP.NET piense que el ViewState de la nueva página ha sido manipulado. Por lo tanto, si desea conservar los datos del formulario y la colección de cadenas de consulta de la página original, debe establecer la propiedad EnableViewStateMac de la directiva Page de la página de destino en False.
2.3 Server.Execute
El método Server.Execute permite que la página ASPX actual ejecute una página ASPX específica en el mismo servidor web. Cuando se ejecuta la página ASPX especificada, el flujo de control regresa a la ubicación donde la página original emitió Server.Execute. llamar.
Este método de navegación de página es similar a una llamada de función para una página ASPX. La página llamada puede acceder a los datos del formulario y a la colección de cadenas de consulta de la página que llama, por lo que la propiedad EnableViewStateMac del comando Página de la página llamada debe establecerse en False.
De forma predeterminada, la salida de la página llamada se agrega al flujo de respuesta actual. Sin embargo, el método Server.Execute tiene un método sobrecargado que permite obtener la salida de la página llamada a través de un objeto TextWriter (o su subobjeto, como un objeto StringWriter), en lugar de agregarlo directamente a la secuencia de salida, por lo que que en la página original Puede ajustar fácilmente la ubicación de los resultados de salida de la página llamada.
Para ilustrar su proceso de trabajo, creemos un formulario web, coloquemos un control de botón (Botón1) y un control de texto (Literal1), cambiemos a la vista de código en la interfaz de diseño, agreguemos una declaración Imports del espacio de nombres System.IO y luego agregue el código ejecutado cuando el usuario hace clic en el botón:
Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click
Dim sw As StringWriter = New StringWriter()
Server.Execute( "WebForm2. aspx", sw)
Literal1.Text = sw.ToString()
End Sub
Luego cree una segunda página WebForm2.aspx para la misma aplicación web. Vaya a la vista HTML de la página y modifique su directiva Página para deshabilitar la verificación de ViewState:
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm2.aspx.vb"
Inherits="Navigate.WebForm2" EnableViewStateMac= "false "%>
Vaya nuevamente a la vista de diseño y agregue algunos controles a la segunda página. A continuación, configure la primera página como página predeterminada e inicie la aplicación. Haga clic en el botón y se mostrará el control de WebForm2 donde se coloca el botón Literal en WebForm1, como se muestra en la Figura 1. Tenga en cuenta que el título de la página y la URL aún muestran la página original WebForm1.
Figura 1: Utilice Server.Execute para fusionar dos archivos fuente.
Cuando utilice el método Server.Transfer o Server.Execute para implementar la navegación, una cosa a tener en cuenta: es posible que la página final no sea una página HTML legal, porque la página finalmente regresó a ella. el cliente puede contener múltiples etiquetas <HTML> y <BODY>. Internet Explorer parece tolerar y manejar esta situación correctamente, pero si desea utilizar otro navegador, será mejor que lo pruebe con cuidado.
3. Comparación y selección
Dado que hay tantas formas de navegar de una página a otra, ¿cómo elegir el mejor método de navegación? Aquí hay algunos factores a considerar:
·Los hipervínculos son mejores si quieres que los usuarios decidan cuándo cambiar de página y a qué página ir.
·Si desea utilizar un programa para controlar el objetivo de conversión, pero el tiempo de conversión lo determina el usuario, utilice el control HyperLink del servidor web para configurar dinámicamente su propiedad NavigateUrl.
·Si desea conectar al usuario a un recurso en otro servidor, utilice Response.Redirect.
· Utilice Response.Redirect para conectar a los usuarios con recursos que no sean ASPX, como páginas HTML.
· Si desea conservar la cadena de consulta como parte de la URL, utilice Response.Redirect.
·Si desea transferir el proceso de ejecución a otra página ASPX en el mismo servidor web, debe usar Server.Transfer en lugar de Response.Redirect, porque Server.Transfer puede evitar comunicaciones de red innecesarias, obteniendo así un mejor rendimiento y efectos de navegación.
· Si desea capturar los resultados de salida de una página ASPX y luego insertar los resultados en otra página ASPX en una ubicación específica, use Server.Execute.
·Si desea asegurarse de que la salida HTML sea legal, utilice Response.Redirect, no utilice el método Server.Transfer o Server.Execute.
Este artículo está traducido de: http://www.ondotnet.com/pub/a/dotnet/2003/04/07/aspnetnav.html