2010-04-08 39 views
0

在一個相當複雜的頁面上,我們通過IE6中的下拉列表獲得了一些不尋常的行爲。要佈局基本結構,頁面上有2個更新面板,每個面板上都有一個GridView,用於顯示主要細節佈局。除網格外,每個面板還包含一些用於過濾相應GridView中的數據的DropDownLists定時器會導致dropdownlists在模式彈出後永久消失

現在發生的事情是底部網格上的一個按鈕將導致顯示一個模式彈出窗體,其中有關行項目的一些細節可以修改。根據ASP.NETAJAXJavaScriptDropDownspostback期間禁用,並在關閉後重新啓用。

底部網格還附帶一個定時器,定期更新它以保持數據視圖的新鮮。當這個計時器在模式彈出窗口關閉後打勾時,下拉列表會神祕地消失,除了在更新panel中顯然會再次呈現的那些。

奇怪的是,如果計時器在彈出窗口打開時彈出,則彈出窗口可以提前顯示並通過模態顯示(哦IE6 ...),但稍後不會消失。

+0

Yuck。您的下拉菜單在代碼隱藏中不是動態編碼的嗎?另外,值得注意的是,使用更新面板時,面板內的所有內容都會在每次回發時通過服務器發送,因此大量內容會導致大量(通常很慢)的請求。但是,你必須做你應該做的。 – 2010-04-08 18:35:01

+0

我認爲你的問題與回發觸發器有關(你是否在你的定時器的特定的更新面板上嘗試了一個觸發器?)和更新面板中的'update ='conditional/always''參數。如果「Page_Load」對你的下拉菜單做任何事情,那麼問題也可能出現在那裏。 – 2010-04-08 18:37:23

回答

1

過了一會兒,我發佈了這個,但問題偶爾會重現,我想我終於找到了答案。

AJAX工具包的模式彈出式JavaScript禁用了頁面上的所有DropDownLists,因爲它們顯示了IE6中最高的Z級別。但是,如果在模式顯示時某事導致回發(如管理不善的計時器),那麼不可見狀態會被記錄到DDL的視圖狀態中。

圍繞它的一個簡單方法就是將違規的DDL放在更新面板中,以便正確刷新更新並不會卡住。更復雜的方法是確保在模態顯示時不會引起多餘的回發。最好的方法可能是將Webforms和所有的行李放在一起,但這幾乎不會發生。