首先,我们从简单的例子开始,这个例子演示了如何在页面中点击按钮打开新页面,输入数据,然后返回到初始页面并进行更新。
 

1.       用VS.NET新建一个项目,选择“Asp.net Web应用程序”
2.       在WebForm1.aspx窗口上增加一个TextBox和一个Button
3.       在WebForm1.aspx的代码中Page_Load中,增加

If (Not IsClientScriptBlockRegistered("clientScript")) Then
            Dim strScript As String = "<script>" + vbCrLf
            strScript += "function OpenWin(){" + vbCrLf
            strScript += "var str=window.showModalDialog('WebForm2.aspx',document.Form1.TextBox1.value)" + vbCrLf
            strScript += "if(str!=null)  document.Form1.TextBox1.value=str" + vbCrLf
            strScript += "}" + vbCrLf
            strScript += "</script>" + vbCrLf
            RegisterClientScriptBlock("clientScript", strScript)
        End If
        Button1.Attributes.Add("onclick", "OpenWin()")

4.       增加一个WebForm2
5.       切换到HTML,删除<body></body>段间内容,代替为

<frameset rows="0,*">
              <frame src="about:blank">
              <frame src="WebForm3.aspx">
       </frameset>

6.       新建一个WebForm3
7.       切换到HTML,在<body>里增加一个“ID=’MyBody’”
8.       在WebForm3上加上一个TextBox和一个Button
9.       在代码里增加一个变量

Protected MyBody As System.Web.UI.HtmlControls.HtmlControl

10.   在Page_load中增加

       If IsPostBack Then
            Dim strScript As String = "<script>" + vbCrLf
            strScript += "window.parent.returnValue='" + TextBox1.Text.Replace("'", "\'") + "'" + vbCrLf
            strScript += "window.parent.close()" + vbCrLf
            strScript += "</script>" + vbCrLf
            If (Not IsClientScriptBlockRegistered("clientScript")) Then
                RegisterClientScriptBlock("clientScript", strScript)
            End If
        End If
        If Not IsPostBack Then
            MyBody.Attributes.Add("onload", "document.Form1.TextBox1.value=window.parent.dialogArguments")
        End If
 好了,现在运行试试,出错了,怎么会这样呢?


 现在我们在WebForm3的HTML页面中,找到<body>区,增加一个runat="server"
再运行一下,一切OK了吧。

现在我们来看一下上面的代码,

首先,在WebForm1初始时,我们定义了一个叫“clientScript”的JavaScript脚本块,并且在这个页中注册了这个脚本块。

这个脚本块定义了一个函数OpenWin
function OpenWin()
{
var str=window.showModalDialog('WebForm2.aspx',document.Form1.TextBox1.value)
if (str!=null)
document.Form1.TextBox1.value=str
}
 

并且将这个函数与按纽Button1的OnClick事件关联起来。

这个函数用window的ShowModalDialog事件打开一个模态的对话框网页WebForm2.aspx,参数是TextBox中的值
其次,在WebForm2中,我们不写代码,只是让WebForm2作为一个容器,定义为框架,其中WebForm3是框架里的一个网页。

最后,我们转到WebForm3中,Page_Load中的指定的JavaScript代码,是让WebForm2的返回值为WebForm3中TextBox值,然后关闭WebForm2。

很明显,WebForm2只是一个过渡页面,为什么要多此一举呢?
我们试着将WebForm1的JavaScript脚本修改一下,直接打开WebForm3.aspx,然后在WebForm3的Page_Load中,将Window.Parent修改为Window,然后再运行一遍,看看会发生什么。
打开网页对话框,一切正常,但是在对话框中,按键却不能返回,既没有返回值,也不能关闭自己,只是有窗口一闪而过。
这是怎么回事呢?
其实,是因为我们用window.showModalDialog打开模态对话框的原因。对于一个用ShowModalDialog方式打开的模态对话框,没有办法用Window.close()的方式来关闭的。按按纽后,打开了一个新的页面,然后又关闭了这个页面。

所以我们用WebForm2中frame来防止提交时打开新页面。

那么,我们不用ShowModalDialog,而用Open会怎么样呢?
在WebForm1中,继续修改脚本
window.open('WebForm3.aspx', 'newwindow', 'height=100, width=400, toolbar =no, menubar=no, scrollbars=no, resizable=no, location=no, status=no')
这下打开到很正常,只是参数传不进去了也传不出来了。