今天碰到一個有關UpdatePanel的bug。
問題描述:UpdatePanel中包含幾個hidden control,每一次postback時該UpdatePanel都會被刷新。
我期望的結果是:UpdatePanel因為包含的都是hidden control,所以無論何種情況它都應該是隱藏的,包括它的height也應該是0.
但是事實是:
1. 當第一次通過get方式打開頁面時,UpdatePanel顯示正常,height等於0.
2. 當通過post方式patial update該UpdatePanel時,奇怪的事情發生了,頁面中UpdatePanel所對應的div的高度不等於0,並且在頁面中占了對應的位置。
尋找原因:一開始以為是自己代碼問題,所以反復對比每次patial update到UpdatePanel div的innerHTML中的內容,發現都一樣。於是改為懷疑是否是microsoft Ajax的問題,把斷點設到MicrosoftAJaxWebForms.JS中Sys$WebForms$PageRequestManager$_updatePanel方法中去,並跳過改變updatePanelElement.innerHtml的語句。回到頁面,div高度沒有改變,於是排除別處改變其高度的可能性。
現在的焦點就在於div.innerHtml上了,下面我嘗試了兩種方式去驗證:
1. div.innerHTML = div.innerHtml 內容不改變
2. div.innerHtml = "" 設空
結果每一種都使div的高度不為0。
結論:網上搜了一下,發現這是一個IE的bug,同樣的情況在Firefox, Opera, 和Safari 裡都不會改變div高度。
另外不止改變innerHtml屬性會這樣,當增加刪除div中child control時都會發生這種情況。
解決辦法:
我最後的解決辦法是利用div style中display:none來使div真正隱藏。