中国设计秀欢迎投稿
联网
平面设计 画册 VI欣赏 包装 CG-插画 搜索 个人网页 Alexa排名 CSS 建站资源 下载专区 JS特效 品牌服装 服装院校 专题欣赏 SEO 图标欣赏 专题
域名注册 虚拟主机 广州网站设计 域名注册 广州网站建设 上海网站建设 虚拟主机 广州网页设计 签名设计 虚拟主机 域名注册 acg王国 ACG玩家
求创科技
上海网麒科技
中国福网
数字引擎
招聘求职
中国互联
时代互联
中资源
当前位置:网络学院首页 >> 编程开发 >> .net >> asp.net模式窗口刷新解决方案

asp.net模式窗口刷新解决方案 (1)

来源:中国设计秀    作者:    点击:613     加入收藏    发表评论
0
顶一下
中国品牌设计网

    在实际运用中,我们在a.aspx页面需要打开一个新窗口(为描述方便,假定为b.aspx),在新窗口关闭之前,需要禁用a.aspx页面。b.aspx里面触发有相应的事件,当事件触发的时候,同时应该更新b.aspx.

解决方法:

     这时我们最好的选择是用模式窗口打开b.aspx,即showModalDialog(b.aspx).

     如果直接用模式窗口打开b.aspx页面,如果b.aspx仅仅是textbox、dropdownlist之类的运行在服务器端的文本控件(这些控件本身也不能触发对应的事件),返回这些控件的值不会出什么问题,但是如果要有服务器端button之类调用cs里面的方法,或者本身会触发事件,就会出问题。当触发这些方法,就会将模式窗口打开的页面做为一个页面弹出(本例也就是b.aspx)。模式窗口里面是不能刷新的,所以这些事件如果要更新当前模式窗口里面的页面内容,是不可能的。

     这中机制是没办法改变的,触发了相应的事件,就会重新加载一次页面(触发了Page_Load事件),即使IsPostBack是false.

     这种情况下该怎么做才能达到预定的目的?

     我们不妨试试这种方法:用框架进行操作。说简单点:创建一个新页面(c.aspx),只做框架支撑。对应子帧指向指定的页面(b.aspx)。这样我们在a.aspx页面里用模式窗口打开c.aspx,就达到预定的效果了。b.aspx页面可以有任何触发事件进行更新页面的内容。同时如果要传值,就需要先传值到框架页面,然后再传到既定的页面。这种方法的由来是参考了同事的做法,本人觉得这种方法很简便,不需要有太多的考虑。操作起来相对来说最容易。

     第二种方法我们就需要有ajax方面的知识了。这种做法需要注意的是同样不能够触发到本页面的事件,否则就会自动弹出模式窗口里面的页面(没有页面支撑的情况下)。这种方式下我们需要借助第三个aspx页面来进行相应的事件操作处理,然后返回操作结果以更新(更新而不是刷新)模式窗口里面的内容。这种方式的难度要比第一种方法大,不好操作。尤其是模式窗口里面控件涉及到数据绑定的时候,更不好操作。

    第三种方法本人没操作成功。大致思想:用window.open()方法打开b.aspx页面,b.aspx页面加载的时候,将a.aspx里面所有的控件都禁用掉,同时也要将a.aspx页面的刷新功能关闭掉

(shift+F10,F5,右键,浏览器本身的刷新按钮),当b.aspx页面关闭的时候,传入一个参数到a.aspx页面,直到该参数值为真的时候,再释放所有禁用的资源。在实际操作中,open()方法打开b.aspx页面后禁止刷新a.aspx页面遇到了问题。在b.aspx页面的window.onload=funciton(){}添加
opener.document.oncontextmenu="return false",达不到禁用右键

opener.document.onkeydown=function(){if(event.keyCode==116) event.keyCode=0;event.returnValue=false;}调用对应的事件也禁止不了F5键。

[1] [2]
2007-08-27 16:06:00    出处:
热点文章/相关文章
网站地图 | 关于我们 | 联系我们 | 网站建设 | 广告服务 | 版权声明 | 免责声明 | 网站公告 | 友情链接 | 留言 | 旧版入口