2008-09-29 40 views
2

看起來,在某些情況下,如果你最終得到由updatePanels包裝的嵌套modalPopups(不理想,我知道,應該重構,但這正是我們正在處理的,因爲如何編寫一些我們想要重用的用戶控件),當您觸發一個應該打開嵌套的modalPopup的回傳時,它會關閉父控件。爲了討論的方便,如果我設置一個斷點,孩子modalPopup的Show()方法被調用前右運行ASP.NET AJAX嵌套的updatePanel modalPopup funkiness

((ModalPopupExtender)this.Parent.Parent.FindControl("modalPopupExtender'sID").Show(); 

,它的工作原理就像我們原先預期。在我看來,因爲當updatePanels嵌套時,他們可以回發他們的父母,父母modalPopup「不知道」它應該顯示並重新從零開始將其面板的可見性重新加載爲假。因爲子modalPopup然後嵌套在其可見性爲false的父面板內,因此對其調用Show()也不起作用。所以不是打開另一個modalPopup,而是關閉當前的一個。這不是一個錯誤,只是我們沒有想到的行爲,所以很難追查到任何地方都沒有例外,但我認爲上面的解釋是有道理的......如果我錯誤地理解了這個問題,請澄清它並啓發我,因爲這似乎並不會一直髮生,我認爲它會!
在這種情況下,對於這種特殊情況,我們堅持重寫這些控件中的一部分,使其不會以嵌套的updatePanel結束,所以這種情況不會發生,但我很好奇:
有沒有人遇到過這個問題,你有沒有想出任何巧妙的解決方法,不涉及調用FindControl()來重新顯示()有問題的modalPopup?

+0

我越使用UpdatePanel,越是討厭它們。我建議你學習jQuery或其他JavaScript庫,並避免一起使用UpdatePanels。 – ctrlShiftBryan 2008-09-29 23:58:03

+0

是的,現在jQuery已經與VS一起發佈了增強的智能感知,現在我想這會變得更加普遍! UpdatePanels在理論上很好,因爲你不必考慮它們,只是把它們扔在標記中......只要它們適用於任何情況。 – Grank 2008-09-30 00:02:30

回答

3

我已經解決了這個問題!
如果您將UpdatePanel的UpdateMode更改爲「有條件」,則當UpdatePanel發佈回來時,父UpdatePanel不會回發,然後嵌套它們根本就沒有問題!
我不知道爲什麼UpdateMode =「始終」是默認的,但是,經驗教訓。