1.如果没有给Updateprogress设置AssociatedUpdatepanel属性,则任何一个异步回送都激发Updateprogress显示。
2.如果给Updateprogress设置了AssociatedUpdatepanel属性,则包含在updatepanel的控件激发的所以异步回送(包括自己所在的updatepanel和其他的updatepanel)将激发updateprogress控件显示。
3.如果updatepanel是嵌套的,则里层updatepanel中的控件将激发所以外层关联的updateprogess控件显示
4.如果updatepanel控件的triggers属性是位于该控件外面的控件或是通过scriptmanage注册的用update方法更新的。则不会激发相关的updateprogess控件显示,所以我们要用javascript控制其显示。
eg:
aspx页面:
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<script language="javascript" type="text/javascript">
var prm=Sys.WebForms.PageRequestManager.getInstance();///取得pagerequestmanager对象
function CancelAsyncPostBoack()
{
if(prm.get_isInAsyncPostBack())
{
prm.abortPostBack(); ///执行pagerequestmanager的aboetpostback方法;
}
}
prm.add_initializeRequest(InitailzeRequest);///设置当引发initalizerequest事件时执行的处理函数;
prm.add_endRequest(EndRequest);///设置当引发endrequest事件是执行的处理函数;
var postBackElement; ///声明一个变量来持有激发异步回送的控件
function InitailzeRequest(sender,args)
{
if(prm.get_isInAsyncPostBack())
{
args.set_cancel(true); ///如果先前的一个异步回送还没有完成,则当前激发的异步回送取消
}
postBackElement=args.get_postBackElement()///将激发本次异步回送的控件赋值给变量
if(postBackElement.id=='Button2'||postBackElement.id=='Button3')
{
$get('UpdateProgress1').style.display='block';
}
}
function EndRequest(sender,args)
{
if(postBackElement.id=='Button2'||postBackElement.id=='Button3')
{
$get('UpdateProgress1').style.display='none';
}
}
</script>
</div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<br />
<asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1">
<ProgressTemplate>
正在加载,请稍等……<br />
<input id="Button8" type="button" value="取消" onclick="CancelAsyncPostBoack()" />
</ProgressTemplate>
</asp:UpdateProgress>
<br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button2" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="updateprogress设置了相关的updatepanel和updatepanel设置外面控件触发时外面的控件" /> <br />
<asp:Button ID="Button3" runat="server" OnClick="Button3_Click" Text="updateprogress设置了相关的updatapanel和用update方法时" />
cs页面:
protected void Page_Load(object sender, EventArgs e)
{
this.ScriptManager1.RegisterAsyncPostBackControl(this.Button3); //注册Button3,使其可以用update方法;
}
protected void Button1_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(2000);
Label1.Text = "这是updatepanel中的效果";
}
protected void Button3_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(2000);
UpdatePanel1.Update();
Label1.Text = "这是用update方法改变的";
}
protected void Button2_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(2000);
Label1.Text = "这是直接设置了updatepanel的triggers属性";
}