代码改变世界

!IsPostBack执行两次

2011-11-11 12:47  通心菜  阅读(430)  评论(0)    收藏  举报

今天碰到了很让人郁闷的问题。一个页面

 

public partial class WebForm1 : LoginPageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //somethings 这个方法执行了两次
              
            }
        }
    }


起初怀疑JS问题,但屏蔽调JS后,问题依旧。最后把页面里的内容分别注释的找了原因,最终发现是页面含有一个<img src="">

 

   <img src="" />

 

当调用这个页面的URL 的时候,会发现,网页被调用了2次。

Google了下,发现具体原因是,在img 对象的src 属性是空字符串("")的时候,浏览器认为这是一个缺省值,值的内容为当前网页的路径。浏览器会用当前路径进行再一次载入,并把其内容作为图像的二进制内 容并试图显示。

对于不同的浏览器测试后,发现对于有无src 或者src 是否为空的情况,还不尽相同,测试结果如下表。

 

代码 Firefox IE6 IE7
<img src="" /> 会重复载入 会重复载入 会重复载入
<img src /> 会重复载入 正常 正常
<img /> 正常 正常 正常