Atlas学习笔记2:UpdateMode

昨天做了个最简单的Atlas应用,其中用到了ScriptManager和UpdatePanel两个控件,今天来了解一下UpdatePanel的UpdateMode属性。UpdateMode有两个值:always 和 conditional,通过这两个值可以用来控制UpdatePanel的刷新方式。

       1. always :如果将UpdateMode属性设为"always",则每次发生页面回发的时候,该UpdatePanel都会刷新。这里的页面回发包括由其他UpdatePanel里的控件或不在UpdatePanel里的控件产生的回发。接着昨天的例子稍做一下改动:

< asp:UpdatePanel  ID ="up1"  runat ="server" >
    
< ContentTemplate >
        
< asp:Label  ID ="lblTime"  runat ="server" ></ asp:Label >< br  />
        
< asp:Button  ID ="btnShowTime"  runat ="server"  Text ="ShowTime"  OnClick ="btnShowTime_Click"   />
    
</ ContentTemplate >
</ asp:UpdatePanel >
< asp:UpdatePanel  ID ="up2"  runat ="server"  UpdateMode ="always" >
    
< ContentTemplate >
        always UpdatePanel:
        
< asp:Label  ID ="lblAlwaysTime"  runat ="server" ></ asp:Label >
    
</ ContentTemplate >
</ asp:UpdatePanel >

CodeFile:

     protected   void  btnShowTime_Click( object  sender, EventArgs e)
    {
        lblTime.Text 
=  DateTime.Now.ToString();
        lblAlwaysTime.Text 
=  DateTime.Now.ToString();
    }

此时如果点击"ShowTime"按钮,两个UpdatePanel里的Label会同时更新,但如果将第二个UpdatePanel的UpdateMode设为conditional,她里面的Label就不会更新了。

      2.conditional:若UpdateMode被设为conditional,则该UpdatePanel会在下列情况被刷新:         

 (1) 由触发器引起的刷新,如下所示:

< asp:UpdatePanel  ID ="up2"  runat ="server"  UpdateMode ="conditional" >
    
< ContentTemplate >
        always UpdatePanel:
        
< asp:Label  ID ="lblAlwaysTime"  runat ="server" ></ asp:Label >
    
</ ContentTemplate >
    
< Triggers >
        
< asp:AsyncPostBackTrigger  ControlID ="btnShowTime"  EventName ="Click"   />
    
</ Triggers >
</ asp:UpdatePanel >

通过在UpdatePanel里设置触发器可以指定特定的按钮来刷新该UpdatePanel.上例中就给UpdatePanel设置了一个触发器,该触发器关联的控件是"btnShowTime",关联的事件是 "Click"。一个UpdatePanel可以设置多个触发器,关于触发器更深一步的知识我想以后会慢慢了解。      

 (2) 调用UpdatePanel的Update()方法:

     protected   void  btnShowTime_Click( object  sender, EventArgs e)
    {
        lblTime.Text 
=  DateTime.Now.ToString();
        lblAlwaysTime.Text 
=  DateTime.Now.ToString();
        up2.Update();
    }

    

 (3) 当该UpdatePanel在其他UpdatePanel里面,并且父容器更新的时候:

< asp:UpdatePanel  ID ="up1"  runat ="server" >
    
< ContentTemplate >
        
< asp:Label  ID ="lblTime"  runat ="server" ></ asp:Label >< br  />
        
< asp:Button  ID ="btnShowTime"  runat ="server"  Text ="ShowTime"  OnClick ="btnShowTime_Click"   />
        
< asp:UpdatePanel  ID ="up2"  runat ="server"  UpdateMode ="conditional" >
            
< ContentTemplate >
                always UpdatePanel:
                
< asp:Label  ID ="lblAlwaysTime"  runat ="server" ></ asp:Label >
            
</ ContentTemplate >
        
</ asp:UpdatePanel >
    
</ ContentTemplate >
</ asp:UpdatePanel >

 

    (4) 当 ChildrenAsTriggers 属性为true,UpdatePanel 内的控件产生回发时,其实昨天的例子就和这种情况差不多。因为默认情况下ChildrenAsTriggers的值为true ,可以省略,此是UpdateMode不管为always还是conditional效果是一样的。

注意:如果ChildrenAsTriggers设为false,则UpdateMode的值必须设为conditional,否则就会抛出异常。默认情况下UpdateMode的值为always。

 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值