Ventanas Emergentes (Popup's)
La situación es la siguiente, tengo un webform principal con una lista de usuarios registrados, en este webform al que llamaremos "Usuarios.aspx" tenemos la opción de crear, editar y eliminar estos usuarios, estas operaciones se realizan llamando a un webform hijo, mejor dicho un webform en forma de popup que saltara delante del Usuarios.aspx para poder realizar la creación, edición, o eliminar a algún usuario en específico, la idea es que después de realizar la isersión o modificación del registro en la base de datos, nuestro popup se cierre e inmediatamente el webform principal se actualice automáticamente. ¿Que como lo hariamos?
Esa es la respuesta que he estado buscando y después de un par de días logre encontrar, todo esto se puede hacer gracias al "javascript" ... y aquí daremos el ejemplo claro de como poder hacerlo.
En mi caso, acostumbrado a trabajar con clases, herencia y reutilización de código he usado una clase específica, mejor dicho, he creado una clase llama Control_Ventanas la cúal contendra 3 principales procedimientos, (void en C#, sub en VB).
Vamos a reemplazar el signo "<" por un "&" y al signo ">" por un "$" para evitar que el código script se mezcle con mi editor de este blog.
public class Control_Ventanas
{
public void AbrirVentanaHija(Page pagina,string url,string param)
{
string cadena_script="";
cadena_script =&script language="JavaScript"$" +
"window.open("+"'"+url+"'"+", 'CustomPopUp'," +"'"+param+"'"+")" +
"&/script$";
pagina.RegisterStartupScript("Popup",cadena_script);
}
public void ActualizarPadre(Page pagina,string url)
{
string cadena_script="";
cadena_script = "&script language="'JavaScript'"$" + "var pWin;" +
"function setParent(){pWin=top.window.opener;}"+
"function reloadParent(){pWin.location.href="+"'"+url+"'"+";}"+
"setParent();"+
"reloadParent();"+
"&/script$";
pagina.RegisterClientScriptBlock("VentanaHija",cadena_script);
}
public void CerrarVentana(System.Web.UI.Page pagina)
{
string cadena_script="";
cadena_script = "&script language="'JavaScript'"$" +
"function cerrar(){"+
"var ventana=window.self;"+
"ventana.opener=window.self;"+
"ventana.close();}"+
"cerrar();"+
"&/script$";
pagina.RegisterClientScriptBlock("CerrarVentana",cadena_script);
}
Estas son los 3 procedimientos usados para poder lograr lo que buscamos, obviamente tendriase que conocer algo de javascript para poder entenderlos, pero ese no es problema alguno, manuales hay y muchos, no pretendo darles clases de javascript tampoco, pero si alguien no entiende dichas funciones puede simplemente preguntar que resolveremos la duda. Por cierto este codigo esta hecho para C#, no lo hice en VB pq no me gusta usarlo, y eso que creo saber más VB que C#, pero bueno, la utilización de la clase y sus procedimientos sería algo así.
El llamado a nuestro popup, o webform secundario se haría de la siguiente manera, obviamente ubicando este código en el evento click de algun link buton, o en el evento click de algun Button.
-------------------------------------------------------------------
Control_Ventanas vent=new Control_Ventanas();
vent.AbrirVentanaHija(this.Page,"http://localhost/Gimnasio/Admin/MantUsuarios.aspx","width=500, height=530, left=300, top=100, resizable=no");
-------------------------------------------------------------------
Para actualizar el webform principal después de realizada la operación que fuese usamos esto, que puede ir en el evento click del boton grabar, actualizar o eliminar.
--------------------------------------------------------------------
Control_Ventanas ventan=new Control_Ventanas();
ventan.ActualizarPadre(this.Page,"http://localhost/Gimnasio/Admin/AdminUser.aspx?texto=refresh");
ventan.CerrarVentana(this.Page);
--------------------------------------------------------------------
De esta manera abrimos un popup y actualizamos la página principal después de realizar una operación en dicho popup y que este sea cerrado.
Obviamente, es algo muy sencillo, pero si sabemos como se hace podemos hacerlo más complejo, ojala les sirva, mi objetivo aparte de esperar que alguien lo use, es que esté en donde esté el día que no recuerde bien como era, simplemente me bastará con ver mi blog jejejeje. Suerte.

