早上在写一个.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的值,一定要检查该值是否为空,不然....不幸又将降临你身上了。
原文:http://memoryblog.com.cn/blog/memory/archives/2006/6512.html