使用JavaScript从C#返回doPostBack
嗨,我有一个父页面,它会打开一个弹出窗口,用户在子弹出页面上进行一些更改,然后单击保存按钮。 当用户单击save按钮时,我希望返回到父页面,以便在父窗口中可以看到弹出窗口中所做的更改 问题:我如何实现上述情景 我想在aspx.cs文件中编写脚本代码,我试过了使用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
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(…)时,有一个布尔参数可以包含它们