todos - deshabilitar boton cerrar formulario c#
¿Cómo cerrar la ventana principal desde su hijo? (3)
Esto puede sonar rústico, pero ¿por qué no simplemente ejecuta el código del servidor que desea ejecutar antes de cerrar y luego le devuelve al cliente un parámetro bool que le permite ejecutar una instrucción if que cierra la ventana (lado del cliente)?
PD: Estoy pensando algorítmicamente, no tengo mucha experiencia con C # del lado del servidor.
Tengo el siguiente caso:
Tengo una vista en cuadrícula en mi página:
page1.aspx
Abro otra página ( page2.aspx
) a través de esa vista de cuadrícula en una ventana rad y luego, a través de algún botón en page2.aspx
abro la última página ( page3.aspx
) también en una rad window
.
todos estos pasos se realizan a través del código del lado del servidor:
protected void OpenNewWindow(string url, int width, int height, int mode)
{
RadWindow newWindow = new RadWindow();
newWindow.NavigateUrl = url;
newWindow.VisibleOnPageLoad = true;
newWindow.KeepInScreenBounds = true;
newWindow.Skin = "Metro";
if (width > 0)
{
newWindow.Width = width;
}
if (height > 0)
{
newWindow.Height = height;
}
newWindow.VisibleStatusbar = false;
if (mode == 0)
{
{
}
//newWindow.OnClientClose = "OnChildWindowClosed";
newWindow.DestroyOnClose = true;
newWindow.InitialBehaviors = WindowBehaviors.Maximize;
}
RadWindowManager1.Windows.Add(newWindow);
}
Lo que quiero hacer es:
Al hacer clic en un botón específico en mi ( page3.aspx
), ciérrelo y su página principal page2.aspx
.
¿Cómo hacer esto (lado del servidor)?
Intento esto: pero solo cierra el page3.aspx
quiero cerrar el padre page2.aspx
también?!
protected void Button1_Click(object sender, EventArgs e)
{
((RadAjaxManager)this.Parent.FindControl("RadAjaxManager1")).ResponseScripts.Add("CloseModal();");
RadAjaxManager1.ResponseScripts.Add("CloseModal();");
}
protected void Button1_Click(object sender, EventArgs e)
{
((RadAjaxManager)this.Parent.FindControl("RadAjaxManager1")).ResponseScripts.Add("CloseModal();");
RadAjaxManager1.ResponseScripts.Add("CloseModal();");
}
Si el evento CloseModal()
correctamente, debería poder llamar a window.close()
dentro de él. Las RadWindows solo existen en el contexto de la ventana principal, por lo que aún debería poder llamar a window.close()
que cerrará cada ventana que esté abierta.
Editar: aunque un poco fuera de tema, este enlace de Telerik muestra cómo obtener un control en la ventana principal desde un RadWindow. A continuación, puede llamar al método close client para cerrar la ventana del navegador (página1.aspx) que cerrará todas las RadWindows posteriores.
De este enlace :
La principal diferencia entre RadWindow y la ventana emergente del navegador es que, al igual que cualquier otro elemento DHTML, RadWindow solo existe en el contexto de la página en la que se creó. No puede salir de los límites de la ventana del navegador.
Puede hacer un evento de burbuja implementando una interfaz a cada padre. Intento ilustrar mi mente
public interface IClosingParent
{
void Close();
}
public class PageA : System.Web.Page, IClosingParent
{
public void IClosingParent.Close()
{
//Code to close it or hide it
}
}
public class PageB : System.Web.Page, ClosingParent
{
public void IClosingParent.Close()
{
((IClosingParent)this.Parent).Close();
//Code to close it or hide it
}
}
public class PageC : System.Web.Page
{
protected void ButtonClose_Click(object sender, EventArgs e)
{
((IClosingParent)this.Parent).Close();
//Code to close it or hide it
}
}
Eso incluye que debe declarar RadWindow en el padre. Entonces, en una vista jerárquica que parece ser así:
PageA : IClosingParent | |-- PageB : IClosingParent | |-- PageC |-- ButtonClose
Creo que con esta solución puede administrar el proceso de cierre como desee y cambiar cada vez que lo desee.