Hola tengo una página principal que abre una ventana emergente, y el usuario realiza algunos cambios en la página emergente secundaria y luego hace clic en el botón Guardar. Cuando el usuario hace clic en el botón Guardar, quiero hacerPostBack en la página principal para que los cambios realizados en la ventana emergente se puedan ver en la ventana principal.

Pregunta : ¿Cómo puedo lograr el escenario anterior?

Quiero escribir el código del script en el archivo aspx.cs, intenté

string script = "";
script = "<script>window.opener.__doPostBack('UpdatePanel1', '')</script>";
ScriptManager.RegisterClientScriptBlock(Literal1, typeof(Literal), "yenile", script, true);

Pero esto no hizo nada, no hubo errores simplemente nada.

Soy nueva en JavaScript, necesito ayuda con todos los pasos.

2
Bastardo 27 may. 2011 a las 19:27

4 respuestas

La mejor respuesta

La página principal:

<asp:UpdatePanel runat="server">
    <ContentTemplate>
        <div>
            <asp:Literal runat="server" ID="ChildWindowResult" />
        </div>
        <hr />
        <input type="button" value="Open Dialog" onclick="window.open('MyDialog.aspx', 'Dialog');" />
        <asp:Button ID="HiddenButtonForChildPostback"  runat="server"
            OnClick="OnChildPostbackOccured" style="display: none;" />
        <asp:HiddenField runat="server" ID="PopupWindowResult"/>
    </ContentTemplate>
</asp:UpdatePanel>

La página MyDialog:

<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.1.min.js"></script>
<script type="text/javascript">
    function postData() {
        var resultField = $("input[type='hidden'][id$='PopupWindowResult']", window.opener.document);
        var parentPosDataButton = $("[id$='HiddenButtonForChildPostback']", window.opener.document);

        resultField.val($("#<%= SomeValueHiddenField.ClientID  %>").val());
        parentPosDataButton.click();
    }
</script>

<asp:TextBox runat="server" ID="SomeValueHiddenField" />
<asp:Button runat="server" OnClick="PostData" Text="Click Me" />

protected void PostData(object sender, EventArgs e)
{
   SomeValueHiddenField.Value = DateTime.Now.ToString();
   ClientScript.RegisterStartupScript(this.GetType(), "PostData", "postData();", true);
}

Pero creo que sería mucho mejor utilizar aquí algunos controles emergentes como PopUpExtender de la biblioteca AjaxControlToolkit o el diálogo de jQuery-UI.

2
Yuriy Rozhovetskiy 30 may. 2011 a las 13:10

El último parámetro es si incluir una etiqueta de script o no

Entonces, si lo haces

RegisterClientScriptBlock(page,type, "<script>foo();</script>", true);

Terminarás con:

"<script><script>foo();</script></script>"

Entonces, cambie su último parámetro a falso, o mejor aún, elimine las etiquetas en la cadena

1
Ortiga 27 may. 2011 a las 19:09

Probablemente necesite usar ClientID:

string script = "";
script = "<script>window.opener.__doPostBack('" + UpdatePanel1.ClientID + "', '')</script>";
ScriptManager.RegisterClientScriptBlock(Literal1, typeof(Literal), "yenile", script, true);
1
Code Maverick 27 may. 2011 a las 15:31