ここに私が見つけたものがあります。更新パネルの外で更新進行状況コントロールを作成すると、更新パネルの起動時にトリガーをリッスンできなくなります。詳細については、以下のリンクを参照してください。
http://www.mostlydevelopers.com/blog/post/2008/08/23/Show-UpdateProgress-when-using-an-UpdatePanel-with-Triggers.aspx
このようにしているので、JavaScriptの回避策を使用する必要がありました。PageRequestManager クラスのインスタンスを取得するには、PageRequestManager オブジェクトの getInstance() メソッドを使用する必要がありました。次に、非同期リクエストが初期化されて終了するときの関数を追加しました。これにより、非同期呼び出しの開始時と終了時に UpdateProgress コントロールを表示できます。(以下の Javascript を参照)
//Function for postbackUpdateProgress
var prm = Sys.WebForms.PageRequestManager.getInstance();
var postBackElement;
function CancelAsyncPostBack() {
if (prm.get_isInAsyncPostBack()) {
prm.abortPostBack();
}
}
prm.add_initializeRequest(InitializeRequest);
prm.add_endRequest(EndRequest);
function InitializeRequest(sender, args) {
if (prm.get_isInAsyncPostBack()) {
args.set_cancel(true);
}
//Get the element that asynchronous postback
postBackElement = args.get_postBackElement();
//check to see if any of the following controls activate sender request.
//search is used to search for the ID name in the string that sharepoint spits out
// as the ID.
var controlA = postBackElement.id.search("DropDownListType");
var controlB = postBackElement.id.search("UserProfileDropList");
var controlC = postBackElement.id.search("MoreNewsLinkButton");
var controlD = postBackElement.id.search("PreviousNewsLinkButton");
if (controlA != -1 || controlB != -1 || controlC != -1 || controlD != -1) {
$('*[id*=Panel1]:visible').hide();
//show UpdateProgress
$('*[id*=UpdateProgress1]').show();
}
}
//After async postback complete, then show panel again and hide UpdateProgress
function EndRequest(sender, args) {
$('*[id*=Panel1]').show();//use wild card in jquery to find Panel1 ID
$('*[id*=UpdateProgress1]:visible').hide();
}
sharepoint は ID 名の前に一連のテキストを配置し、JavaScript は ID のテキスト リテラルだけではそれを見つけることができないため、ID 名に対して search() を実行する必要があったことに注意してください。jquery を使用したワイルド カード アプローチを使用して、以下を使用してパネルを見つけます。
$(' [id =Panel1]').show();//jquery でワイルドカードを使用して Panel1 ID を検索します
それを示すために。
と
$(' [id =Panel1]:visible').hide();
非同期呼び出しが初期化されたときに更新パネルを非表示にします。更新パネルを非表示にする必要はありませんが、非表示にした方が私の特定の実装は見た目が良くなります。