You are on page 1of 3

Tcnicas de Navegacin entre Web Forms ASP.

NET
Introduccin Un aspecto importante en la construccin de aplicaciones Web es la navegacin entra pginas y el uso de link, que en conjunto unen las pginas de nuestra aplicacin haciendo de esta un todo. De lo contrario tendramos pginas aisladas que no se podran comunicar entre si. En este artculo, revisaremos distintas tcnicas de navegacin tanto con cdigo a nivel del servidor como del cliente. Conocer estas tcnicas ser de gran utilidad en el momento de disear una aplicacin WEB. Tcnicas de navegacin entre pginas a) Navegacin con el control HiperLink Esta tcnica permite navegar hasta otra pgina html como asp y aspx. Este control no proporciona ningn evento del lado del servidor. La navegacin se realiza inmediatamente cuando el usuario genera el evento click, del lado del cliente, en el control. La direccin de destino se especifica en la propiedad NavigateURL del control. Si se quiere interceptar un evento clic desde el servidor para controlar la navegacin desde cdigo, se puede utilizar un control de servidor Button, LinkButton o ImageButton ms el objeto Response. b) Utilizando el mtodo Response.Redirect Permite navegar hasta otra pgina, pero por cdigo. Es equivalente a la navegacin con el control HiperLink. Para utilizar este mtodo, simplemente introduzca el cdigo siguiente en el evento click de un control de servidor Button: Private Sub ImageButton1_Click(ByVal sender As System.Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles ImageButton1.Click Response.Redirect("PaginaDestino.aspx") End Sub Observacin: El mtodo sobrecargado Redirect(URL, Boolean) tiene un parmetro boolean que especifica si se termina la ejecucin de la pgina actual: True, o no : False. Si se especifica True o si se utiliza el mtodo Redirect especificando solamente la URL de destino, se producir una excepcin del tipo ThreadAbortException, que indica el trmino de la ejecucin de la pgina que origina la navegacin. Se debe considerar este comentario cuando se tiene sentencias Redirect dentro de bloques Try, ya que la excepcin producida por el mtodo Redirect puede no ser esperada en el flujo de la aplicacin. c) Utilizando el mtodo Server. Transfer Solo sirve para navegar entre pginas aspx. Este mtodo termina la ejecucin del Web Form que origina la llamada y navega hasta la pgina aspx de destino. Si consideramos el comentario anterior, la utilizacin de este mtodo, siempre va a generar una excepcin del tipo ThreadAbortException, ya que termina la ejecucin de la pgina de origen. La sintaxis es la misma que para el mtodo Redirect: Private Sub ImageButton1_Click(ByVal sender As System.Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles ImageButton1.Click Server.Transfer("NuevaPagina.aspx") End Sub

La versin sobrecargada de este mtodo, incorpora un valor booleano para especificar si se conservan las colecciones QueryString y Form luego del trmino de la ejecucin de la pgina actual. Esto permite que podamos acceder a los valores del ViewState de la pgina de origen desde la pgina de destino. Ver el ejemplo ms adelante. 'PaginaOrigen.aspx Private Sub ImageButton1_Click(ByVal sender As System.Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles ImageButton1.Click Server.Transfer("PaginaDestino.aspx", True) End Sub 'PaginaDestino.aspx Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim pCollectionForm As System.Collections.Specialized.NameValueCollection pCollectionForm = Request.Form Label1.Text = pCollectionForm.Item("TextBox1") End Sub Observacin: Debe introducirse la directiva EnableViewStateMac=false en la pgina de origen para deshabilitar el hashing del ViewState, de lo contrario se producir una excepcin. La pgina de origen contiene un control de servidor TextBox llamado Textbox1. El valor de este cuadro sw texto es obtenido desde la pgina de destino y mostrado en el control Label1. d) Utilizando el mtodo Server.Execute Solo funciona para navegar entre pginas aspx. La ejecucin de la pgina de destino comienza sin detener la ejecucin de la pgina que origin la navegacin. Este mtodo permite desplegar el contenido de la pgina de destino en una seccin de la pgina de origen. En el ejemplo de ms abajo, se muestra el uso de esta tcnica utilizando el mtodo sobrecargado Server.Execute(String, TextWriter) En el ejemplo siguiente se escribe el contenido de la pgina de destino en la pgina de origen utilizando Response.Write Private Sub BtnServerEx_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnServerEx.Click Dim pContenidoPaginaDestino As New System.IO.StringWriter Server.Execute("PaginaTres.aspx" , pContenidoPaginaDestino) Response.Write(pContenidoPaginaDestino) End Sub Observacin: Al igual que para el caso de utilizar Server.Transfer y mantener la los datos de la estado de la pgina de origen, es necesario incorporar la directiva de pgina EnableViewStateMac=false para deshabilitar el hashing del ViewState. e) Utilizando el mtodo de script del lado del cliente Window.Open Esta tcnica, permite navegar a pginas html o aspx. Como se trata de un script del lado del cliente, a travs de este mtodo es posible controlar el aspecto y otras caractersticas propias de la ventana de

Internet Explorer, como por ejemplo, abrir el contenido en una nueva ventana o en una ventana tipo popup. Desde los objetos del lado del servidor no es posible controlar estas caractersticas ya que este objeto de Internet Explorer solo existe en el lado del cliente (DOM). Existen varios mtodos para llamar script del lado del cliente desde cdigo del lado del servidor. En esta ocasin, mostrar un mtodo para agregar cdigo de cliente en la pgina html utilizando RegisterStartupScript. Este mtodo agrega secuencias de comandos al final de la pgina html. Otra tcnica (no se muestra en este artculo), sera establecer el valor del atributo onclick de un control html desde cdigo del servidor: Control.Attributes.Add ("onclick", "javascript:AbrePagina('PaginaDestino.aspx);"), para agregar el nombre de una funcin, en el ejemplo AbrePagina , del lado del cliente definida en un bloque script. 1- Ejemplo utilizando RegisterStartupScript Lo que haremos, ser agregar el script del cliente en el evento clic de un control asp Button. Lo que har el cdigo es agregar el script al final de la pgina de origen, lo que har que este se ejecute como si siempre hubiese estado all. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim pClientScript As String pClientScript = "<script language=vbScript> " pClientScript += " window.open " & Chr(34) & "Pagina5.aspx" & Chr(34) & _ "," & Chr(34) & "_blank" & Chr(34) & "," & Chr(34) & "width=510,height=360,left=200,top=250" & Chr(34) pClientScript += " </script>"

RegisterStartupScript("PaginaDestino", pClientScript) End Sub El cdigo anterior, genera el siguiente cdigo en la pgina html antes de la etiqueta </FORM>: <SCRIPT language=vbScript> 'window.open "PaginaTres.aspx","_blank","width=510,height=360,left=200,top=250" </SCRIPT> <script language=vbScript> 'window.open "Pagina5.aspx","_blank","width=510,height=360,left=200,top=250" </script> Conclusiones Como se puede ver, existen diferentes maneras de navegar entre formularios web. El usar una u otra tcnica depender del escenario que estemos enfrentando. Por ejemplo, si nuestro requerimiento involucra manejar las caractersticas de la ventana a la que estamos navegando, necesariamente tendremos que utilizar una tcnica que considere cdigo del lado del cliente. Siempre estas tcnicas se podrn complementar con otras alternativas que pueden dar un aspecto ms profesional a nuestros desarrollos y que dependen del ingenio del desarrollador. Por ejemplo podramos implementar un mtodo de navegacin con controles de usuario (.ascx) ms el mtodo Response.Redirect (se incluye el cdigo en los ejemplos). Con esta tcnica, se tiene una sola pgina donde se van cargando los distintos formularios (controles .ascx) en un control PlaceHolder dependiendo por ejemplo de una parmetro que se pase en la llamada: Response.Redirect(default.aspx?Pagina=Pagina1.ascx) Si bien en la mayora de los casos se podr resolver la navegacin con Response.Redirect o con Window.Open, es recomendable estudiar y practicar con las tcnicas antes descritas, ya que en ciertas situaciones nos ayudarn a resolver nuestro problema de manera ms eficiente.