UpdatePanel内のScriptControl
-
10-10-2019 - |
質問
私は持っています ScriptControl
(必要 ScriptManager
)JavaScriptを使用して、クライアント側の相互作用を処理します ICallbackEventHandler
前後に通信する。すべてが、ページ上のコントロールの1つまたは複数のインスタンスで完全に機能します。コントロールを内部に配置しました GridView
並べ替えで、それでも機能します。しかし、私は置きます GridView
で UpdatePanel
そして今、私が並べ替えるたびに、私は各インスタンスに対して次のエラーを取得します:
Sys.InvalidOperationException: Two components with the same id 'GridView_ctl02_MyControl' can't be added to the application.
誰かがこれを解決する方法について私を正しい方向に向けることができますか?私は仮定しています ScriptManager
古いものを処分していません Sys.UI.Control
しようとする前のオブジェクト $create()
同じIDを持つ新しいもの。私は考えました UpdatePanel
/ScriptManager
組み合わせは、交換されるオブジェクトの処分に自動的に処理されますか?
編集: このページは私が思ったことをサポートしているようです: http://msdn.microsoft.com/en-us/library/system.web.ui.scriptmanager.registerdispose.aspx
RegisterDisposeメソッドを使用して、UpdatePanelコントロール内にあるコントロールの廃棄スクリプトを登録します。非同期のポストバック中に、UpdatePanelコントロールを更新、削除、または作成できます。 パネルが更新または削除された場合、updatePanel内にあるコントロールに登録されている廃棄スクリプトが呼び出されます。典型的なページ開発シナリオでは、RegisterDisposeメソッドを呼び出す必要はありません。
再確認するために私は配置しました alert("dispose " + this.element.id)
私のjavascriptの中 dispose()
働き。すべてのインスタンスアラート dispose GridView_ctl02_MyControl
, 、しかしその後、2つのコンポーネントに同じ名前ができないというエラーがあります GridView_ctl02_MyControl
. 。私は途方に暮れています...
解決
ページがアンロードされると、コンポーネントのコンポーネント dispose()
メソッドが呼び出されます Sys.Application.removeComponent()
も呼ばれます。いつ UpdatePanel
リロードのみ dispose()
メソッドが呼び出されます。今のところ、私はこれを置くことによって解決しました Sys.Application.removeComponent(this);
内側 dispose()
. 。 $ remove($ createと同様)などのショートカットが見つかりませんでした。
これは、関連するDOM要素(もしあれば)がUpdatePanelに置き換えられた後でもコンポーネントをロードすることができるという点で論理的に思えます。このようにして、コンポーネントの生活をよりコントロールできます。ユースケースを想像することはできませんが、あなたはそれを思いつくことができると確信しています。
私が離れていて、より良いアプローチがあるなら、私に知らせてください!