showModalDialog弹出一个窗口,使子窗口在父窗口之上。且子窗口必须关闭才能对父窗口操作
来源:互联网 发布:mac 网页数据采集器 编辑:程序博客网 时间:2024/05/18 00:04
一、在主窗体中:
1、
function BySearch(layerid)
{
if(window.showModalDialog("../BySearch.aspx?id="+layerid,window,"status=no;dialogWidth=800px;dialogHeight=600px;menu=no;resizeable=yes;scroll=yes;center=yes;edge=raise")=="OK") {
// window.location.reload();
window.document.forms(0).submit();
//注意此处若使用document.location.reload(); 会导致“要再次显示该网页,internet exploer 需要重新发送您以前提交的信息”的问题,因此用window.document.forms(0).submit(); 更好。
}
}
同时在老网页的GridView中需要添加Page_PreRender事件,在Page_PreRender中将GridView中的数据重新绑定一次即可,否则window.document.forms(0).submit(); 不起作用。
protected void Page_PreRender(object sender, EventArgs e)
{
bindData();
}
2、BntSearch.Attributes.Add("onclick", "BySearch(" & layerid & ")")
二、在子窗体中:
服务器端按钮:
Response.Write("<script language=javascript>window.returnValue='OK';self.close();</script>")
三、在子窗体中清空ShowModalDialog数据缓存
Response.Expires = -1
四、以下为弹出窗体参考:
有时修改了某些数据,然后通过ShowModalDialog来显示,这时通常显示出来的数据还是上一次的数据
可能ShowModalDialog缓存机制的问题,这时你就需要手动的去清除缓存或者写一些代码……
HTML方面
<meta http-equiv="pragram" content="no-cache">
禁止浏览器从本地缓存中调阅页面。
网页不保存在缓存中,每次访问都刷新页面。
<meta http-equiv="cache-control" content="no-cache, must-revalidate">
同上面意思差不多,必须重新加载页面
<meta http-equiv="expires" content="0">
网页在缓存中的过期时间为0,一旦网页过期,必须从服务器上重新订阅。
.NET方面
Response.Expires = -1;
<script language="javascript" type="text/javascript">
function ScanMessageDetail(messageId)
{
if(window.showModalDialog("testclose.aspx?messageid="+messageId,"","status=no;dialogWidth=800px;dialogHeight=500px;menu=no;resizeable=yes;scroll=yes;center=yes;edge=raise")=="OK") {
window.document.forms(0).submit();
document.location.href = "DataListTest.aspx";
}
}
</script>
在后台中注册脚本
protected void GridView1_RowDataBound(object sender,GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes.Add("onclick", "ScanMessageDetail(4939)");
}
}
在目标页的关闭按钮
客户端按钮:
<input id="Button1" type="button" value="关闭" onclick="javascript:window.returnValue='OK';self.close();"/>
服务器端按钮:
1、在子窗口<head>里加一句 <base target=_self>
2、Protected Sub BntClose_Click(ByVal sender As Object, ByVal e As System.EventArgs)
按钮事件
Response.Write("<script language=javascript>window.returnValue='OK';self.close();</script>")
End Sub
3、若子窗口中用的是UpdatePanel,则用Response.Write会出错,此时应用<Triggers>
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="BntClose" />
</Triggers>
</asp:UpdatePanel>
在字窗口里面设置
<body onbeforeclose="parent.location.value='你想要的地址'">
window.opener.location="xxxx.asp"试试
showModalDialog()子窗口刷新父窗口 收藏
今天再次使用showModalDialog(),发现了两个问题,一是子窗口如何刷新父窗口,二是窗口的参数问题。
1 子窗口刷新父窗口
如果是window.open();问题就好办,直接用window.opener.location.reload();就搞定了
但是如果是window.showModalDialog(),它里面是没有window.opener的,不能用opener引用父窗口,直接调用用报错。
总结了一下有两种方法可以解决,一是在子窗口中刷新父窗口,二是在子窗口关闭后,父窗口自己刷新。
(1)在子窗口中刷新父窗口
父窗口: 因为子窗口不能直接引用父窗口,所以需要父窗口主动传递指针变量,就是window.showModalDialog的第二个参数,参数为“window”,
示例:
var returnValue = window.showModalDialog(url,window,"dialogHeight=350px;dialogWidth=400px;center=yes;status=no;scroll=no;resizable=yes");
注意:window不要加引号。
子窗口:执行完操作后调用window.dialogArgument.location.reload();
网上说只调用这一句就可以了,但我试了不行,具体原因没查到,自己猜测要这么用,父窗口必须是iframe. 如果父窗口不是iframe,想要实现这个功能,还可以在body中加入"onUnload=window.dialogArgument.location.reload()" ,这样子窗口关闭时就可以刷新父窗口了。
(2)在父窗口中刷新自己
这个实现比较简单,在子窗口关闭后,父窗口自己刷新,例如:
var returnValue = window.showModalDialog(url,window,"dialogHeight=350px;dialogWidth=400px;center=yes;status=no;scroll=no;resizable=yes");
if(returnValue == "true"){
window.location.reload();
}
还有一种方法就是在子窗口中调用父窗口的一个方法,该方法自己刷新本页面(父窗口);
子窗口:window.dialogArgument.reloadPage();window.close;
父窗口: function reloadPage(){window.location.reload();}
但是我试验后不行,能调用到这个方法,但是就是不刷新,原因不详。
2 showModalDialog参数问题:
vReturnValue = window.showModalDialog(sURL [, vArguments] [,sFeatures]);
第三个参数用来描述对话框的外观等信息,我调整了半天都不见效,后来发现原因出现在两个地方:
(1)长度,宽度,都是用 dialogHeight, dialogWidth表示,而不是heigh,width,和window.open()是不同的。
(2)多个参数用";"分割,而不是用","。
- showModalDialog弹出一个窗口,使子窗口在父窗口之上。且子窗口必须关闭才能对父窗口操作
- 父子showModalDialog窗口,关闭子窗口刷新父窗口
- 在父窗口关闭弹出的子窗口
- 子窗口操作父窗口
- showModalDialog()子窗口刷新父窗口
- showModalDialog()子窗口刷新父窗口
- showModalDialog()子窗口刷新父窗口
- showModalDialog()子窗口刷新父窗口
- showModalDialog关闭子窗口刷新主窗口
- showModalDialog关闭子窗口刷新主窗口
- showModalDialog关闭子窗口刷新主窗口
- mdi子窗口在父窗口其他控件之上显示
- 子窗口父窗口
- 关闭子窗口刷新父窗口 不弹出询问对话框
- 弹出子窗口 关闭新窗口刷新父窗口
- showModalDialog使用例子,父窗口向子窗口传递值,子窗口设置父窗口的值,子窗口关闭的时候返回值到父窗口.
- showModalDialog使用例子,父窗口向子窗口传递值,子窗口设置父窗口的值,子窗口关闭的时候返回值到父窗口
- c# 关闭子窗口刷新父窗口
- 管理技术的重要性
- 用setacl通过命令行来设置注册表的权限
- Struts2.1.8+Spring2.5.6+Hibernate3.2整合的两种方式!!!
- 寻找我的沁香
- 参考文献标准格式
- showModalDialog弹出一个窗口,使子窗口在父窗口之上。且子窗口必须关闭才能对父窗口操作
- 运行mojarra-2.0.2例子
- C++设计开发规范
- 职场上进30招
- 项目架构
- blazeds实现消息推送的实例
- 如何获得窗口句柄(HWND )和改变窗口属性
- 【转】十大没落IT技术:台式机和MP3播放器上榜
- 揭开Socket编程的面纱