在开发Web应用时经常会遇到这种情况,即点击一个链接或按钮,弹出一个子页面,在子页面中进行某些操作,关闭子窗口后向父窗口返回值。
 可以用window.open打开子窗口,用Response.Write ("<script language = 'javascript'> opener.Label1.innerText = '" + strReturnValue + "';</script>") 将返回值绑定到父窗口的Label1控件上(关闭子窗口后,可以看到Label1的文本值发生变化)。但是在继续对父窗口进行操作时,发现并没有将返回值绑定到Label1控件上或者说取得的Label1的值还是它的初始值(如果未赋值则为空)。如果仅需要将返回值显示出来,则可以采用此方法。具体代码如下:
 
ParentPage.aspx
<a href = " javascript : w = window.open('ChildPage.aspx?param=paramValue ','w','width=500,height=500'); w.focus();">添加税种</a>
ChildPage.cs
private void btnAddItem_Click(object sender, System.EventArgs e)
{
        Response.Write(
"<script language='javascript'>opener.Label1.innerText = '"+strReturnValue+"';</script>") ;
        Response.Write(
"<script language='javascript'>window.close();</script>") ;
    }


但是这种方法子窗口弹出的速度较慢,最好的方法是使用模态对话框,它提供了返回值功能,而且速度很快。如果弹出的子窗口不关闭,则不能对其父窗口进行任何操作(焦点始终在子窗口上)。可以在ParentPage.aspx页面中添加一个非服务器端的Button控件,对其Click事件编写相应的JavaScript代码,弹出模态对话框。而在父页面中,用TextBox控件接收返回值。具体代码如下:

 ParentPage.aspx
<script language="javascript">
    
function Button1_Click(){
        a 
= window.external.m2_blocked('ChildPage.aspx?param=paramValue');//打开模态对话框,变量a接收返回值
        document.Form1.TextBox1.value = a;//将返回值绑定到TextBox1控件
        document.forms[0].submit();//刷新页面
    }
</script>
<input type="button" value="打开子窗口" onclick="Button1_Click()">
ChildPage.cs
private void btnAddItem_Click(object sender, System.EventArgs e)
{
        Response.Write(
"<script language='javascript'> window.returnValue = '"+strReturnValue+"' ;</script>") ;
        Response.Write(
"<script language='javascript'>window.close();</script>") ;
}