Updateprogress

作者在 2008-05-16 11:54:42 发布以下内容

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属性";
    }

 

 

————————————————————
技术日志 | 阅读 4901 次
文章评论,共1条
zhiguo2008
2008-06-11 18:05
1
楼主,你好,我测试了一下上面的代码.发现提示脚本错误:<br />
&nbsp;&nbsp;Microsoft JScript 运行时错误: 'Sys' 未定义,不知何故?这阵子我正好要做一个进度条的东东?能够发点代码给我吗?望赐教.我的邮箱zhangzhiguo@wingtech.com
游客请输入验证码