使用JavaScript从C#返回doPostBack

使用JavaScript从C#返回doPostBack,c#,javascript,asp.net,dopostback,C#,Javascript,Asp.net,Dopostback,嗨,我有一个父页面,它会打开一个弹出窗口,用户在子弹出页面上进行一些更改,然后单击保存按钮。 当用户单击save按钮时,我希望返回到父页面,以便在父窗口中可以看到弹出窗口中所做的更改 问题:我如何实现上述情景 我想在aspx.cs文件中编写脚本代码,我试过了 string script = ""; script = "<script>window.opener.__doPostBack('UpdatePanel1', '')</script>"; ScriptManage

嗨,我有一个父页面,它会打开一个弹出窗口,用户在子弹出页面上进行一些更改,然后单击保存按钮。 当用户单击save按钮时,我希望返回到父页面,以便在父窗口中可以看到弹出窗口中所做的更改

问题:我如何实现上述情景

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

string script = "";
script = "<script>window.opener.__doPostBack('UpdatePanel1', '')</script>";
ScriptManager.RegisterClientScriptBlock(Literal1, typeof(Literal), "yenile", script, true);
string脚本=”“;
script=“window.opener.\uu doPostBack('UpdatePanel1',”);
RegisterClientScriptBlock(Literal1,typeof(Literal),“yenile”,script,true);
但这没有任何作用,没有错误,什么都没有


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

您可能需要使用
ClientID

string script = "";
script = "<script>window.opener.__doPostBack('" + UpdatePanel1.ClientID + "', '')</script>";
ScriptManager.RegisterClientScriptBlock(Literal1, typeof(Literal), "yenile", script, true);
string脚本=”“;
script=“window.opener.\uu doPostBack”(“+UpdatePanel1.ClientID+”,“);
RegisterClientScriptBlock(Literal1,typeof(Literal),“yenile”,script,true);

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

所以,如果你这样做了

RegisterClientScriptBlock(page,type, "<script>foo();</script>", true);
RegisterClientScriptBlock(第页,键入“foo();”,true);
您最终将得到:

"<script><script>foo();</script></script>"
“foo();”
因此,将上一个参数更改为false,或者最好删除父页面中字符串中的标记:

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

函数postData(){
var resultField=$(“输入[type='hidden'][id$='popupIndowResult']”,window.opener.document);
var parentPosDataButton=$(“[id$='HiddenButtonForChildPostback']”,window.opener.document);
resultField.val($(“#”).val();
parentPosDataButton.click();
}
受保护的void PostData(对象发送方、事件参数e)
{
SomeValueHiddenField.Value=DateTime.Now.ToString();
RegisterStartupScript(this.GetType(),“PostData”,“PostData();”,true);
}

但是我相信在这里使用一些弹出控件会更好,比如来自AjaxControlToolkit库的PopUpExtender或者来自jQueryUI的对话框

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


嗯。。。老实说,我没有阅读整个问题,我只是看到了你的
\uuuDoPostBack
,在ASP.NET中它会损坏runat=“server”控件的ID,所以你总是在
\uuDoPostBack
中使用完整的ClientID。你为什么不直接执行
UpdatePanel1.update()从弹出窗口中的代码隐藏?Scott我想你遗漏了什么,我正在尝试在子页面(弹出页面)中回发到父页面的updatepanel。此外,我将尝试这样做,谢谢。你需要使用UniqueID,而不是ClientID作为“执行回发”中的控件id。@Ray谢谢Ray先生,我必须承认,在JavaScript方面我是个傻瓜。你不需要脚本标记,当你调用ScriptManager.RegisterClientScriptBlock(…)时,有一个布尔参数可以包含它们