3

場合によっては、ネストされた modalPopups が updatePanels でラップされてしまう場合があるようです (私が知っている理想的ではなく、おそらくリファクタリングする必要がありますが、ユーザー コントロールの一部をリネストされた modalPopup を開く必要があるポストバックを起動すると、代わりに親のものを閉じます。議論のために、ブレークポイントを設定して実行すると

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

子 modalPopup の Show() メソッドが呼び出される直前に、当初の期待どおりに動作します。updatePanels がネストされている場合、親をポストバックできるため、親の modalPopup は表示されるはずのことを「認識せず」、パネルの可視性を最初から false としてリロードするようです。子の modalPopup は、可視性が false の親パネル内にネストされるため、それに対して Show() を呼び出しても効果はありません。したがって、別の modalPopup を開く代わりに、現在のものを閉じます。これはエラーではなく、予期しない動作であるため、どこにも例外がスローされずに追跡するのは困難でしたが、上記の説明は理にかなっていると思います...問題を間違って理解した場合は、それを明確にしてくださいこれはそうではないので、私を啓発してください。
この特定の状況のこの時点で、ネストされた updatePanels にならないようにこれらのコントロールのいくつかを書き直していないので、これは起こりませんが、私は興味があります:
以前にこの問題に遭遇した人はいますか?問題の modalPopup を re-Show() するための FindControl() の呼び出しを含まない巧妙な回避策を考え出しますか?

4

1 に答える 1

4

私はこの問題を解決しました!
UpdatePanel の UpdateMode を "Conditional" に変更すると、子 UpdatePanel がポストバックしたときに親 UpdatePanel がポストバックしないため、それらをネストすることはまったく問題になりません。
UpdateMode="Always" がデフォルトである理由はわかりませんが、教訓が得られました。

于 2008-09-30T16:10:35.853 に答える