Foros del Web » Programación para mayores de 30 ;) » .NET »

Mensaje del explorer a recargar window.opener

Estas en el tema de Mensaje del explorer a recargar window.opener en el foro de .NET en Foros del Web. Hola a todos! Tengo un nuevo problema. Tengo un problema y para explicarlo he hecho el siguiente ejemplo. padre.aspx Código HTML: <HTML> <HEAD> <title> Padre ...
  #1 (permalink)  
Antiguo 08/03/2005, 11:47
 
Fecha de Ingreso: agosto-2004
Mensajes: 48
Antigüedad: 19 años, 8 meses
Puntos: 0
Mensaje del explorer a recargar window.opener

Hola a todos!
Tengo un nuevo problema. Tengo un problema y para explicarlo he hecho el siguiente ejemplo.
padre.aspx
Código HTML:
<HTML>
	<HEAD>
		<title>Padre</title>
		<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
		<meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
		<meta name="vs_defaultClientScript" content="JavaScript">
		<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
	</HEAD>
	<body>
		<form id="Form1" method="post" runat="server">
			<asp:HyperLink id="HyperLink1" runat="server" NavigateUrl="javascript:var PopUpWin = window.open('Hijo.aspx','','left=50,top=10,width=250,height=150,status=no,toolbar=no,menubar=no,location=center,scrollbars=no')">Agregar Persona</asp:HyperLink>
			<asp:DataGrid id="dgPersonas" runat="server" Width="344px"></asp:DataGrid>
			<asp:Button id="Button1" runat="server" Width="104px" Text="Accion" EnableViewState="False"
				CausesValidation="False"></asp:Button>
		</form>
	</body>
</HTML> 
padre.aspx.vb
Código:
Dim TablaEmpleados As DataTable
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Introducir aquí el código de usuario para inicializar la página

        If Not Page.IsPostBack Then
            If Session("TablaEmpleados") Is Nothing Then
                TablaEmpleados = CrearDataSource()
                Session("TablaEmpleados") = TablaEmpleados
            End If

        End If
        BindGrid()
    End Sub
    Private Function CrearDataSource() As DataTable
        Dim dt As New DataTable
        Dim col As DataColumn
        'Se Crea la columna Nombre
        dt.Columns.Add(New DataColumn("Nombre", System.Type.GetType("System.String")))
        'Se crea la columna Apellidos
        dt.Columns.Add(New DataColumn("Apellidos", System.Type.GetType("System.String")))
        Return dt
    End Function
    Private Sub BindGrid()
        TablaEmpleados = Session("TablaEmpleados")
        dgPersonas.DataSource = TablaEmpleados
        dgPersonas.DataBind()
    End Sub


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    End Sub
Hijo.aspx
Código HTML:
<HTML>
	<HEAD>
		<title>Hijo</title>
		<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
		<meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
		<meta name="vs_defaultClientScript" content="JavaScript">
		<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
	</HEAD>
	<body>
		<form id="Form1" method="post" runat="server">
			<P><FONT size="2">Nombre :&nbsp;&nbsp;&nbsp; </FONT>
				<asp:TextBox id="txtNombre" runat="server" tabIndex="1"></asp:TextBox></P>
			<P><FONT size="2">Apellidos:&nbsp;
					<asp:TextBox id="txtApellidos" runat="server" tabIndex="2"></asp:TextBox></FONT></P>
			<P><FONT size="2">
					<asp:Button id="btnGuardar" runat="server" Text="Guardar" Width="104px" tabIndex="3"></asp:Button><INPUT id="btnSalir" style="WIDTH: 104px; HEIGHT: 24px" onclick="window.close();" type="button"
						value="Cerrar" name="btnSalir" runat="server" tabIndex="4"></FONT></P>
		</form>
	</body> 
hijo.aspx.vb
Código:
 Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Introducir aquí el código de usuario para inicializar la página
    End Sub

    Private Sub btnGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGuardar.Click
        Dim TablaEmpleados As DataTable = Session("TablaEmpleados")
        Dim rowNuevo As DataRow = TablaEmpleados.NewRow
        rowNuevo("Nombre") = txtNombre.Text.Trim
        rowNuevo("Apellidos") = txtApellidos.Text.Trim
        TablaEmpleados.Rows.Add(rowNuevo)
        Session("TablaEmpleados") = TablaEmpleados

        Response.Write("<SCRIPT LANGUAGE='JavaScript'> window.opener.location.reload(); window.close();</SCRIPT>")
    End Sub
Esta es una pagina donde muestro un listado de personas, y para agregar cada registro se abre un popup para introducir los datos.
Mientras solo presione el link Agregar todo funciona correctamente.
Pero si ocurreo otro evento antes como el del boton "Accion" y luego abro el popup, y aparece un fastidioso mensaje:
Mensaje Internet Explorer
Cita:
La pagina no puede actualizarse sin reenviar la información.
Haga click en Reintentar para volver a enviar la información,
en Cancelar para volver a la pagina que estaba intentado ver.
Reintentar Cancelar
Alguien sabe que ocurre.
Saludos y gracias por leer este mensaje.
  #2 (permalink)  
Antiguo 09/03/2005, 01:43
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Bien, ocurre, porque al antes de hacer el reload, has hecho cambios en la página padre, por lo que para hacer el mismo te dice lo de reenviar la información.
En vez de hacer el reload, intenta hacer:

window.opener.__doPostBack('cambiosrealizados','')

y en el padre hacer:

if not ispostback then
....
else if request.form("__eventtarget") = "cambiosrealizados"
BindGrid
end if


Creo que estos es lo que intentas hacer, si no es así comunicalo y profundizaremos un poco más.

Suerte
  #3 (permalink)  
Antiguo 09/03/2005, 11:59
 
Fecha de Ingreso: agosto-2004
Mensajes: 48
Antigüedad: 19 años, 8 meses
Puntos: 0
Exclamación Aun no

Hola Jose_minglein2 de antemano gracias por tu respuesta, hice lo siguiente segun entendi:
En Hijo.aspx.vb antes tenia:
Código:
Response.Write("<SCRIPT LANGUAGE='JavaScript'> window.opener.location.reload(); window.close();</SCRIPT>")
y lo cambie por :
Código:
Response.Write("<SCRIPT LANGUAGE='JavaScript'> window.opener.__doPostBack('cambiosrealizados','');</SCRIPT>")
En Padre.aspx.vb Antes tenia:
Código:
If Not Page.IsPostBack Then
            If Session("TablaEmpleados") Is Nothing Then
                ...
            End If
End If
BindGrid()
Y lo cambie por:
Código:
If Not Page.IsPostBack Then
            ...
ElseIf Request.Form("__eventtarget") = "cambiosrealizados" Then
            BindGrid()
End If
Despues de hacer estos cambio lo probe y no vi nungun resultado incluso ni se actualiza la pagina padre, pero me estoy convenciendo que entendi mal
¿no es asi?
Saludos
  #4 (permalink)  
Antiguo 10/03/2005, 07:42
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Bien, asegurate de que el padre adminte el __doPostBack, para ello añade esta línea el el page_load del mismo:

Page.GetPostBackEventReference(Page)
  #5 (permalink)  
Antiguo 10/03/2005, 10:35
 
Fecha de Ingreso: agosto-2004
Mensajes: 48
Antigüedad: 19 años, 8 meses
Puntos: 0
Listo!!!

Jose_minglein2 ya lo agregue y fue un exito!!! gracias .
Ahora explicame por favor, que es realmente lo que sucedia, cual es en realidad la funcion del método __dopostback(), para que mas lo puedo aplicar, etc.

Saludos
  #6 (permalink)  
Antiguo 10/03/2005, 11:06
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
pues yo no soy ningun experto, pero mas o menos el postback, lo que hace es hacer una petición de la misma página que lo hace al servidor pero para que realice ciertos cambios en la misma, por ejemplo:
cuando tu haces click en un botón con id="guardar" y runat="server", lo que estas haciendo es un __doPostBack('guardar',''), es decir un POST y un GET

dicho de otramanera:

Servidor envía página a cliente
cliente hace cambios y envia datos al servidor
servidor opera y devuelve datos

seguro que te lo he explicado como el culo, pero más o menos espero que lo entiendas.


Ah! otra cosa, también se puede utlizar el otro parámetros, es decir:

__doPostBack('cambiosrealizados','hola')

y para recuperarlo

Request.Form("__eventargument")

Espero que te sea de ayuda

Un saludo
  #7 (permalink)  
Antiguo 10/03/2005, 11:22
 
Fecha de Ingreso: agosto-2004
Mensajes: 48
Antigüedad: 19 años, 8 meses
Puntos: 0
Entiendo

Bueno muchas gracias, empezare hacer pruebas con lo ya mencionado.
Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:48.