Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler)
は、更新パネルの読み込みが完了した後に起動するため、機能しません。クライアント側で、どれがどれであるかを見つける方法を見つけることができません。
ScriptManager.GetCurrent(Page).AsyncPostBackSourceElementID AsyncPostBackSourceElementID
これはサーバー側オブジェクトであり、クライアント側が必要なため機能しません
ClientSide .Netフレームワークは、正しいコンテンツを更新するために、どのUpdatePanelを更新しているかを知る必要があります。確かにこのイベントにフックする方法はありますか?
任意の助けいただければ幸いです。
PageRequestManager.beginRequest イベントをフックして、 BeginRequestEventArgs.postBackElement プロパティを検査できます。
reallyはUpdatePanelを提供しないが、UpdatePanel内のコントロールを提供することに注意してください。それでも十分です。
編集:さらに良いことに、 PageRequestManager.pageLoaded イベントは PageLoadedEventArgs.panelsUpdated (および panelsCreated )プロパティを提供します。
ありがとうございます。どちらも良い答えです。最後に、クライアント側のスクリプト「ページロード」を使用しました。それはグーグルが私に明らかにしなかったかなり埋もれた方法です。興味がある人のために、このコードはFireBugと連携して、更新されたパネルを見つけるために動作するPageLoadedメソッドの優れたデモを提供します。
<script type="text/javascript">
$(document).ready(function() {
panelsLoaded = 1;
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PageLoaded)
});
function PageLoaded(sender, args) {
console.log("I have occured " + panelsLoaded++ + " times!");
var panelsCreated = args.get_panelsCreated();
for (var i = 0; i < panelsCreated.length; i++) {
console.log("Panels Updating: " + panelsCreated[i].id);
}
var panelsUpdated = args.get_panelsUpdated();
for (var i = 0; i < panelsUpdated.length; i++) {
console.log("Panels Updating: " + panelsUpdated[i].id);
}
}
</script>
これはあなたの解決策かもしれません。
UpdatePanelのOnLoadイベントのコードビハインドで、起動スクリプトを登録します。
string scriptText = "alert('Bar!');";
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "foo", scriptText, true);