標籤:style blog http color 檔案 資料
早上在寫一個.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(‘‘) 害苦了我。
此記,防止下次再犯。