Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Refresco de una página desde otra

985 views
Skip to first unread message

José Mª Fueyo

unread,
Jul 3, 2009, 7:09:01 AM7/3/09
to

Hola a todos.
Tengo un formulario con un gridview. Al pié de éste gridview he colocado un
botón que permite cargar otro formulario en blanco para hacer la inserción de
registros.
Basándome en lo que encontré en
http://www.codeproject.com/KB/webforms/GridViewRefreshFromParent.aspx, cree
los controles necesarios para recabar los datos del nuevo registro, y los
botones de aceptar y cancelar. El primero recaba la información y realiza la
inserción a través de un procedimiento almacenado. Sin problemas.
El segundo, tiene establecida la propiedad "OnClientClik" a
"window.close();". Con esto consigo cerrar el formulario. Para forzar el
refresque de el formulario llamante, uso esto:
<body onunload="opener.location.reload();">
¿Cual es problema? cuando hago click tanto en aceptar como en cancelar me
aparece un mensaje con dos botones (Reintentar y Cancelar) que dice "Para
mostrar de nuevo esta página web, Internet Explorer debe volver a enviar la
información que ya envió anteriormente.
Sí estuviera realizando una compra, haga click en cancelar para evitar que
la transacción se haga dos veces. De otra forma, haga click en reintentar
para volver a mostrar la página web".
Sí cancelo, no me refresta la página. El proceso se reliza correctamente,
pero no se muestra a menos que navegue a otra pagina y vuelva a la misma.
¿Hay alguna forma de evitar éste comportamiento?
Gracias y buen "finde".

Salu2,
José Mª Fueyo

Jhonny Vargas P.

unread,
Jul 3, 2009, 11:51:33 AM7/3/09
to

Hola José Mª,

Tanto tiempo, espero que estés muy bien..

Sobre tu pregunta, así como puedes "ejecutar" un reload de la página hija a
la página padre... perfectamente puedes ejecutar una rutina "javascript".

ejemplo:
window.opener.MiFuncionJavaScript();

y en esta función puedes invocar el evento de algún botón o el llenado de
grilla, revisa la función "__doPostBack" que genera .net en forma automática
en el cliente, sino la tienes puedes crear una copia que debe ser igual a
esta:

function __doPostBack(eventTarget, eventArgument) {
var theform = document.Form1;
theform.__EVENTTARGET.value = eventTarget;
theform.__EVENTARGUMENT.value =
eventArgument;
theform.submit();
}


--
Saludos,
Jhonny Vargas P.
Santiago de Chile

... el viejo guatón Vargas...


"José Mª Fueyo" <jmf...@NOSPAMya.com> escribió en el mensaje de
noticias:DF8DC266-BB87-4B12...@microsoft.com...

José Mª Fueyo

unread,
Jul 6, 2009, 10:28:02 AM7/6/09
to

Muy buenas viejo Guatón jeje
Lo primero, perdona la tardanza en responder. Los sentimientos y deseos son
mútuos.
Le echaré un ojo, cualquier cosa la expongo en éste mismo hilo.

Salu2
--
José Mª Fueyo

José Mª Fueyo

unread,
Jul 7, 2009, 7:52:01 AM7/7/09
to

Hola Jhonny.
Te cuento lo que he hecho. En el evento click del botón, después de todo el
proceso de inserción en DB, he puesto esto:

Dim script As New StringBuilder
script.Append("<script language='javascript'> {")
script.Append("opener.location.reload();")
script.Append("window.close();}")
script.Append("</script>")
Response.Write(script.ToString)

Esto me actualiza la página llamante y me cierra el formulario llamado.
Peeeero...me sigue saliendo una advertencia con dos botones (Reintentar y
Cancelar):

"Para mostrar de nuevo ésta página web, Internet Explorer debe volver a

enviar la información que ya envió anteriormente.
Sí estuviera realizando una compra, haga click en cancelar para evitar que

la transacción se realice dos veces. De otra forma, haga click en Reintentar

para volver a mostrar la página web."

¿Alguna idea al respecto...? gracias.

Daniel Ulfe

unread,
Jul 7, 2009, 9:06:06 AM7/7/09
to

Hola,

Jhonny Vargas tiene razón... tu puedes usar la función __doPostBack y
"forzar" un PostBack... de esa manera el browser no te dará ningún warning.

Ejemplo:

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
bool processedOnLoad= false;

if (IsPostBack)
if (Request["__EVENTARGUMENT"] == "_forcePostBack_")
{
Label2.Text = String.Format("Client Button Clicked -
{0}", DateTime.Now.ToString());
processedOnLoad = true;
}

Label1.Text = String.Format("{0} - Process On Load: {1}",
(IsPostBack) ? "PostBack" : "No PostBack",
processedOnLoad);
}

protected void Button2_Click(object sender, EventArgs e)
{
Label2.Text = String.Format("Server Button Clicked - {0}",
DateTime.Now.ToString());
}
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>

<script language="javascript" type="text/javascript">
// <!CDATA[

function Button1_onclick() {
// Esta function te retorna "__doPostBack" (por ahora)...
es mejor usar este metodo porque Microsoft puede
// decidir algun dia renombrear el nombre de la funcion
cliente.
<%=this.Page.GetPostBackEventReference(this,
"_forcePostBack_") %>
}

// ]]>
</script>

</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<br />
<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
<br />
<input id="Button1" type="button" value="Client Button"
onclick="return Button1_onclick()" />
<br />
<asp:Button ID="Button2" runat="server" Text="Server Button"
onclick="Button2_Click" />
<br />
</div>
</form>
</body>
</html>

Mas information:
http://aspalliance.com/895_Understanding_the_JavaScript___doPostBack_Function

Espero que te ayude,
Daniel.

Jos� M� Fueyo

unread,
Jul 7, 2009, 9:40:44 AM7/7/09
to

Gracias Daniel, le echar� un ojo

Salu2
--
Jos� M� Fueyo


José Mª Fueyo

unread,
Jul 7, 2009, 11:42:01 AM7/7/09
to
Hola de nuevo
A ver sí os he entendido bien.
En la página llamante, he creado ésta función en javascript:

function Refrescar()
{
_doPostBack('grvDatos','');
}

donde grvDatos es el control gridview que quiero actualizar.
En la página llamada, dentro del botón que hace la inserción de datos, y
tras todo el proceso de manejo de dichos datos, he puesto éste código (dentro
del evento click del botón "actualizar"):

Dim script As New StringBuilder
script.Append("<script language='javascript'> {")

script.Append("window.opener.Refrescar();")


script.Append("window.close();}")
script.Append("</script>")
Response.Write(script.ToString)

Pero no me hace nada. Es más, ni siquera cierra la ventana y creo que me
altera algo del diseño (tamaño de letra aplicada, etc...).
¿Cual es el error? ¿alguna sugerencia?
Gracias

Daniel Ulfe

unread,
Jul 7, 2009, 12:09:41 PM7/7/09
to
Hola,

Ese código JS no te va alterar el diseño... así que ese es otro error.
(revisa tus clases CSS)

Acerca de lo que quieres hacer.... tu función refrescar (pienso yo)
debería ser:

function Refrescar()
{
// Comienza con 2 "_"
__doPostBack('__Page','_refrescar_grvDatos_')
}

y luego en el Page_Load (en el servidor) tendrias algo asi:

protected void Page_Load(object sender, EventArgs e)
{

if (IsPostBack) {
if (Request["__EVENTARGUMENT"] == "_refrescar_grvDatos_") {
RefrescarGrid();
}
}
}

Donde "RefrecarGrid" en un método que carga los datos de tu DB y enlaza
el Grid.

Daniel.

Sashka

unread,
Jul 7, 2009, 12:20:40 PM7/7/09
to

Lo que yo no entiendo es lo de los 2 botones... porqué harías click los 2
botones????, por error me imagino... yo deshabilitaría el otro botón al
hacer click en cualquiera de ellos....

Sashka

"José Mª Fueyo" <jmf...@NOSPAMya.com> escribió en el mensaje de

noticias:6093BCFD-1149-4BCF...@microsoft.com...

José Mª Fueyo

unread,
Jul 7, 2009, 12:31:01 PM7/7/09
to
Gracias Daniel.
Funciona de fábula :-)

José Mª Fueyo

unread,
Jul 7, 2009, 1:09:01 PM7/7/09
to

Hola Sas
Tomo nota para verlo mañana.
¡Y ya te estás yendo al webcast que llegas tarde! jejeje
0 new messages