您的位置:首页 > 编程语言 > ASP

如何在ASP.NET程序中弹出新窗口并得到返回值

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

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')
这下打开到很正常,只是参数传不进去了也传不出来了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: