我正在对具有许多UpdatePanel和UpdateProgress控件的ASP.NET Web窗体应用程序进行一些更改。
我添加了一个UpdatePanel,仅针对此UpdatePanel,我希望在此UpdatePanel更新时停止显示所有UpdateProgress。
许多UpdateProgress控件没有设置AssociatedUpdatePanelID,因此在我更新新的UpdatePanel时会显示它们。
有没有办法排除UpdatePanel触发没有设置AssociatedUpdatePanelID的UpdateProgress?可能是一些JavaScript?
我在这里找到了一些解决方案,但它们要求您知道UpdateProgress的ID。在整个应用程序中有很多UpdateProgress,我不想指定每个。
答案 0 :(得分:0)
好的,所以没有答案我进一步调查并提出客户端解决方案。
如果UpdateProgress控件没有关联的UpdatePanel,并且触发部分回发的UpdatePanel至少有一个与之关联的UpdateProgress,则此脚本将禁止显示它们。
长话短说:如果UpdatePanel有一个关联的UpdateProgress控件,那么只有它们会在触发部分回发时显示。
<script type="text/javascript">
//array of original values
var updateProgressDefaults = [];
Sys.Application.add_init(appl_init);
function appl_init() {
var c = Sys.Application.getComponents();
for (var i = 0; i < c.length; i++) {
if (Object.getType(c[i]).getName() == "Sys.UI._UpdateProgress" && !c[i]._associatedUpdatePanelId) {
updateProgressDefaults[c[i].get_id()] = c[i]._associatedUpdatePanelId;
};
}
var pgRegMgr = Sys.WebForms.PageRequestManager.getInstance();
pgRegMgr.add_initializeRequest(BeginHandler);
pgRegMgr.add_endRequest(EndHandler);
}
function BeginHandler(sender, args) {
//There is no _updatePanelsToUpdate if a trigger is outside of an UpdatePanel
if (!args._updatePanelsToUpdate) return;
//Check if the affected UpdatePanel has an associated UpdateProgress control
var hasUpdateProgress = false;
var c = Sys.Application.getComponents();
for (var i = 0; i < args._updatePanelsToUpdate.length; i++) {
for (var j = 0; j < c.length; j++) {
if (Object.getType(c[j]).getName() == "Sys.UI._UpdateProgress" && args._updatePanelsToUpdate[i].replace(/\$/g, "_") == c[j]._associatedUpdatePanelId) {
hasUpdateProgress = true;
break;
}
}
if (hasUpdateProgress) break;
}
//If the UpdatePanel has an associated UpdateProgress control then set all the UpdateProgress controls without associated UpdatePanels to a non-existant UpdatePanel
if (hasUpdateProgress) {
for (var i = 0; i < c.length; i++) {
var id = c[i].get_id();
var type = Object.getType(c[i]).getName();
if (type == "Sys.UI._UpdateProgress" && !c[i]._associatedUpdatePanelId) {
c[i]._associatedUpdatePanelId = "NullUpdateProgress";
};
}
}
}
//Restores AssociatedUpdatePanelId for all UpdateProgress controls
function EndHandler() {
for (var key in updateProgressDefaults) {
$get(key).control._associatedUpdatePanelId = updateProgressDefaults[key];
}
}
</script>
来源:Disable common UpdateProgress controls for an UpdatePanel with an associated UpdateProgress