使用JavaScript从C#执行doPostBack

本文关键字:执行 doPostBack JavaScript 使用 | 更新日期: 2023-09-27 17:57:45

hi我有一个父页面,它打开了一个弹出窗口,用户在子弹出页面上进行了一些更改,然后单击保存按钮。当用户单击保存按钮时,我想对父页面执行PostBack操作,以便在父窗口中可以看到弹出窗口中所做的更改。

问题:如何实现上述场景?

我想在aspx.cs文件中编写脚本代码,我尝试了

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

但这没有任何作用,没有任何错误,只是什么都没有。

我是JavaScript新手,所有步骤都需要帮助。

使用JavaScript从C#执行doPostBack

父页面:

<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>

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);
}

但我相信,在这里使用一些弹出控件会更好,比如AjaxControlToolkit库中的PopUpExtender或jQuery UI中的对话框。

您可能需要使用ClientID:

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

最后一个参数是是否包含脚本标记

所以,如果你做

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

你最终会得到:

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

因此,将最后一个参数更改为false,或者更好的做法是删除字符串

中的标记

查看以下建议的解决方案:

http://livshitz.wordpress.com/2011/06/12/use-popup-to-postbackupdate-its-parentopener-without-losing-viewstate-values-and-close/#more-16