如何在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')
这下打开到很正常,只是参数传不进去了也传不出来了。
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')
这下打开到很正常,只是参数传不进去了也传不出来了。
相关文章推荐
- ExtAsp.Net中弹出新窗口并得到返回值(TriggerBox控件)
- 如何在Firefox中实现ASP.NET 不弹出窗口的Windows Integrated Authentication
- ASP.NET DATAGRID中如何点击整列或模板列后弹出窗口并选中新窗口数据将值返回给模板列中的文本框
- ASP.NET-C# Post 一般处理程序(ashx)并得到返回值
- Asp.net弹出新窗口,获得返回值
- Asp.net弹出新窗口,在gridview 获取值并返回值
- asp.net弹出窗口 返回值
- ASP.NET DATAGRID中如何点击整列或模板列后弹出窗口并选中新窗口数据将值返回给模板列中的文本框
- [ASP.NET]如何点击按钮弹出新窗口,输入数据后返回并刷新页面?(C#代码)
- [原创] ASP.NET 中如何弹出提示窗口然后导向另外一个页面
- 如何在Firefox中实现ASP.NET 不弹出窗口的Windows Integrated Authentication
- [ASP.NET]如何点击按钮弹出新窗口,输入数据后返回并刷新页面?(C#代码)
- Asp.net弹出新窗口,获得返回值
- Asp.net弹出新窗口,获得返回值
- 如何解决在ASP.NET中应用JavaScript的 alert 函数时弹出的窗口背景全部为白色的问题
- Asp.net弹出新窗口,获得返回值
- asp.net弹出窗口 返回值
- 在ASP.NET中,如何实现点击按钮弹出新窗口.刷新父窗口
- 如何在ASP.NET中使用div弹出窗口
- Asp.net弹出新窗口,获得返回值