たとえば、gridview itemtemplate で使用できるユーザー コントロールがあります。これは、ページの読み込み時にコントロールがページ上にある場合とない場合があることを意味します。コントロールが itemtemplate 内にある場合、(updatepanels を介して) 非同期ポストバックを介してグリッドビューを表示します。
コントロール自体は JavaScript に依存しているため、スクリプトブロックを登録します。最初に使用した
Page.ClientScript.RegistrerClientScriptBlock
しかし、これは非同期ポストバック (updatepanels) では機能しないため、非同期ポストバック後にページにスクリプトを登録できる ScriptManager を使用して同じことを試しました。すごい!。
ScriptManager.RegisterClientScriptBlock
ただし、ScriptManager (私が知っていること) には、スクリプトが既にページにあるかどうかを確認する機能がないため、ポストバックごとにスクリプト ブロックの複製が生成されます。これはもちろん望ましくない動作です。
Google で実行したところ、PageRequestManager の Dispose() メソッドを呼び出すことができることがわかりました。これは、スクリプトをクリアしてから再度追加するため、機能します (これにより、未使用のスクリプト ブロックを削除済みから削除するという問題も解決します)。コントロール)。
Sys.WebForms.PageRequestManager.getInstance().Dispose()
ただし、ここに投稿して以来、もちろんマイナス面があります:)。Dispose() メソッドは、マスター ページのインスタンスも破棄します。これにより、そこで実行されているスクリプトが、非同期ポストバック (updateprogress など) の後に機能しなくなります。
では、ScriptManager またはその他のツールを使用してページにスクリプトが既に存在するかどうかを確認して、重複したスクリプトを挿入するのを防ぐ方法はありますか? また、特定のスクリプト ブロックを削除する方法はありますか (たとえば、itemtemplate のアイテムを削除する場合)。
よろしくお願いします。