Abrir una nueva ventana con ASP.NET
En los proyectos con ASP.NET en ocasiones se nos hace necesario abrir una nueva ventana desde nuestro código de lado del servidor, por ejemplo: Al presionar un botón se ejecuta una acción y posteriormente se muestra un reporte, dicho reporte puede ser mostrado en una ventana nueva.
Para realzar este sencillo proceso les dejo el siguiente truco.
Creamos nuestra página ASPX y colocaremos un control ScriptManager. Este puede ser del Ajax Extension o de los controles agregados AjaxControl Tool Kit. Esto dependerá del tipo de proyecto que realicemos.
Utilizamos el ScriptManager para llamar la función Javascript que crearemos para abrir la nueva ventana sin que nuestro botón realice el PostBack.
1 2 3 4 5 6 | <ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" EnableScriptGlobalization="true" EnableScriptLocalization="true"> </ajaxToolkit:ToolkitScriptManager> |
La etiqueta ScriptManager solo debe ir una vez por página y es utilizada para realizar las llamadas asincrónicas con AJAX.
Colocamos ahora el botón que realizara el proceso interno en el servidor y posteriormente abrirá la nueva ventana con el reporte.
1 | <asp:Button ID=" btnButtons" runat="server" Text="Button" /> |
Podemos ahora escribir la función Javascript que abrirá la nueva ventana en el navegador.
1 2 3 4 5 | <script type="text/javascript"> function OpenWindows(url){ window.open(url, " Título", "directories=no, location=no, menubar=no, scrollbars=yes, statusbar=no, tittlebar=no"); } </script> |
– Window.open: Permite abrir la nueva ventana en el navegador
– URL: Es una variable que contiene la dirección física del archivo que queremos abrir. Es muy importante que la ruta sea relativa apuntando a un archivo dentro de nuestro proyecto.
– Título: El título que tendrá la nueva ventana abierta.
Ya teniendo todo el código del lado del cliente vamos trabajar un sencillo script con código visual Basic en el lado del servidor:
1 2 3 4 5 6 7 | Protected Sub btnButtons_ClickImprimir(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnButtons.ClickImprimir Dim URL As String = "../Reportes/ReportViewer.aspx?cod=2&tire=Despacho_Factura" Dim Funcion As String = "OpenWindows('" & URL & "');" ScriptManager.RegisterStartupScript(Me.Page, Me.GetType(), "SIFEL", Funcion, True) End Sub |
Que hace el cógio?
Simplemente llama al evento clic del botón para ejecutar nuestra función Javascript haciendo uso del ScriptManager.
muchas gracias fue de gran ayuda 😉
No hay porque Rosy se te agradece por visitar el sitio, que lo tengo un poco abandonado en cuanto a publicaciones de aprendizaje por falta de tiempo pero por alli estare pronto colocando mas info.
Hola… Justamente estoy intentando hacer todo eso mismo que planteas en tu introducción, pero tengo un problema… Yo soy un programador que no le gusta usar controles externos al framework de desarrollo, ahora estoy intentando hacerlo con ScriptManager del espacio de nombre System.Web.UI, pero aunque en la ayuda de Visual Studio existe referencia hacia
RegisterStartupScript (Page, Type, String, String, Boolean)
la funcion para registrar el Script no existe en ScriptManager.Si pudieras ayudarme con eso te lo agradecere.
Hola, gracias por visitar nuestro sitio web, seria de ayuda que pusieras que version de VS estas utilizando para ayudarte un poco mejor.
Creo que estas cometiendo un error con tu ScriptManager, recuerde que la referencia no es al ID del ScriptManager si no a la etiqueta en si, por regla una pagina aspx solo puede tener un ScriptManager. Quedaria entonces de la siguiente forma:
Ahora lo importante, el codigo en el lado del servidor:
Hola… Gracias por responder.
La verdad es que necesito hacer clic en un botón que me habrá otra ventana por que los reportes de mi aplicación están alojados en otro portal, el problema real radica en que con código JavaScript no lo puedo hacer por que antes de redirigir primero necesito guardar algunos datos en una Base de Datos con los que el portal de reportes trabajara para mostrar el reporte correcto.
Pero vamos al grano, mi código es este y aunque no me genera ninguna excepción, no funciona. Es decir, no abre la ventana:
String newGUID = Guid.NewGuid().ToString();
String newURL = String.Concat("http://[ServerName]/[Portal Name]/Default.aspx?ref=", newGUID);
StringBuilder sb = new StringBuilder(" function openWindow() {window.open(\"");
sb.Append(newURL);
sb.Append("\");} ");
ClientScriptManager csMgr = this.ClientScript;
csMgr.RegisterStartupScript(this.GetType(), "AppName", sb.ToString());//, true);
De antemano, gracias por tu tiempo.
El proceso para abrir la nueva pagina es el mismo, lo que deberas hacer es pasar la informacion mediante QUERY STRING (Variables en la URL para los que no sepan) y luego en el evento LOAD o CREATE de tu pagina destino (Pagina que estas abriendo), ejectuar los procesos y funciones que necesites para cargar la informacion que desplegaras haciendo uso de las variabels de la URL
Tu URL lopasarias:
Dim URL As String = “../carpeta/archivo.aspx?tu-variable=” valor-de-tu-variable