zoukankan      html  css  js  c++  java
  • ASP.NET Page_Load执行两次

    早上在写一个.NET的计数器程序,发现每次刷新页面,计数器就加2,屏蔽一切可能导致这种情况的代码,问题依旧,苦闷了一个上午!后来在好友的协助下发现Page_Load这个方法执行了两次,上网搜索相关的问题,发现遇到该问题的还真不少!

     诸如加入AutoEventWireup="false"等方法简直是胡扯,因为一旦创建一个aspx页面,这行代码便会自动加入。后来找出一篇<img src="">会导致Page_load执行两遍的文章,恍然大悟,马上将iis的默认始动文档,去掉,然后再调试,一切正常!

     本着钻研精神,然后再慢慢找出导致执行两次的原因,仔细检查了aspx文件,并无发现<img src="">的代码,当时也觉得奇怪,难道还有其他可能性,诸如<script src="">等?一个个来调试,仍然没有半点头绪!后来不经意发现当前页面有一个图片不能正常显示(该图片的地址是从数据库读出,右键属性,发现其地址为:http://locahost,害了我头痛了一个上午的祸首终于给我揪出来了。原来是 img src对应的数值是空导致的!

     致于img标签为空执行page_load的原因是:img src=""   > img src="/"  > img src="/index.aspx",因为重新请求了index.aspx,所以page_load又执行了一次。不过如果IIS没有设置默认文档,该问题是不会出现的,所以一些人提及到本地调试没有问题,一旦上传至服务器就出问题,就是因为这个原因!

       防止page_load多次执行的办法最好是检查客户端是否有空src的图片,然后服务器端亦要做相关的安全检查,如果某个字段打算作为img src的值,一定要检查该值是否为空,不然....不幸又将降临你身上了。

    以上是网上搜索而来,以下才是我的真正情况:

    首先想到的是代码中是不是存在跳转到自身的页面的代码,比如:当前页面是a.aspx, 但在代码中存在Response.Redirect("a.aspx")语句,或者在客户端存在window.location.href = 'a.aspx'这种语句,从而造成页面重新载入,但是通过检查代码没有发现。在网络上搜索了一下,发现一篇文章中说可能是图片控件<img/>中的图片地址引(src=...)用了无效地址造成了页面的重新载入。这个给我们提供了一个思路,也就是html或者服务器端控件的属性被赋非法值,那么可能造成也页面的重新早入,通过一点点的去掉html代码,然后进行断点跟踪,发现在table中间的background属性被我赋了一个颜色值,即"#ECECEC"这样的值。而background的合法值应该是一个地址,我的原意是给table设置一个背景颜色,所以这里的属性是bgcolor。就是由于这个原因造成了页面的重新载入,修改后问题解决。

    罪魁祸首的代码如下:

    <li style="background:url('') no-repeat 0 7px;">
    <span class="numberfont">当前页<%= this.PageIndex %>/共<%= TotalPage %>页(<%= TotalCount %>条记录)</span>
    

    就是这个 background:url('') 害苦了我。

    此记,防止下次再犯。

  • 相关阅读:
    AVR单片机教程——EasyElectronics Library v1.1手册
    C++ lambda的演化
    希尔排序的正确性 (Correctness of ShellSort)
    PAT甲级满分有感
    PAT甲级题分类汇编——杂项
    Python第八章-异常
    Python第七章-面向对象高级
    Python第七章-面向对象初级
    Python第六章-函数06-高阶函数
    Python第六章-函数05-迭代器&生成器
  • 原文地址:https://www.cnblogs.com/4kapple/p/3822461.html
Copyright © 2011-2022 走看看