好吧,这就是我发现的。如果您在更新面板之外创建更新进度控件,则在触发更新面板时将无法侦听更新面板上的触发器。可以在下面的链接中阅读更多内容。
http://www.mostlydevelopers.com/blog/post/2008/08/23/Show-UpdateProgress-when-using-an-UpdatePanel-with-Triggers.aspx
因此,由于我是这样做的,所以我不得不使用 javascript 解决方法。我必须使用 PageRequestManager 对象的 getInstance() 方法来获取 PageRequestManager 类的实例。然后,我在异步请求初始化和结束时添加了它的函数。这将允许我们在异步调用开始和结束时显示我们的 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();
}
请注意,我必须对 ID 名称进行 search(),因为 sharepoint 在您的 ID 名称之前放置了一堆文本,否则 javascript 将无法仅通过 ID 的文本文字找到它。使用 jquery 的通配符方法通过以下方式查找面板:
$(' [id =Panel1]').show();//在jquery中使用通配符查找Panel1 ID
展示它。
和
$(' [id =Panel1]:visible').hide();
在异步调用初始化时隐藏更新面板。您不必隐藏更新面板,但如果我这样做,我的特定实现看起来更美观。