window.showModalDialog第二次不走PageLoad方法

今天发现了一个问题,大家或者见过,或者没有注意到,反正做个提醒啦。

我们一般写页面的时候都会在Page_Load的时候加Response.Expires = -1;可能很多人没有注意,也可能很多人知道这个是清缓存的,但是不知道用处。

调试的时候,都不会走pageload方法,然后就清缓存,重启IIS,或者重新编译,每次都是页面第一次打开的时候走PageLoad,然后就不走了。

         这个问题出现的两个条件:1、浏览器是IE(今天只用了IE8),2、打开窗口的方式为:window.showModalDialog。

    这样当我们第二次打开页面的时候会直接从缓存中取,不会再走page_load了,估计是MS为了自己页面性能进行优化的吧。

         PS:同样测试了一下,FireFox和Chrome,貌似没有这个问题

解决方法:

1、  后台加:Response.Expires = -1;

2、前台弹出页面的时候,url后面加window.showModalDialog("ChildPage.aspx?ID="+ Math.random(), "", features);

3、前台加:  <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
                                    <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
                                    <META HTTP-EQUIV="Expires" CONTENT="0">

    4、前台页面添加<%@ OutputCache Duration="1"  VaryByParam="none"%>

Duration 和 VaryByParam 是必选参数,前者标识过期时间,后者表示 GETPOST 名称 / 值对的字符串。如果不使用该属性,可是设置为 none 。

在这里我们还要说明一个参数 VaryByCustom ,使用这个参数,我们可以自定义输出缓存要求的任意文本。

除了在 OutputCache 指令里面申明该属性之外,我们还得在应用程序的 global.asax 文件的代码声明块中,重写 GetVaryByCustomString 方法来为自定义字符串指定输出缓存的行为。

         5、将IE的设置改一下再试试,Internet选项->常规->设置->每次访问此页时检查。

 

         其实俺对缓存这一块了解也不深,有兴趣的话可以看看这个网页: http://blog.csdn.net/kable999/article/details/4412808

posted @ 2013-04-09 14:22  kevin_h_wang  阅读(1397)  评论(0编辑  收藏  举报