程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> Atlas學習筆記2:UpdateMode

Atlas學習筆記2:UpdateMode

編輯:.NET實例教程
昨天做了個最簡單的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效果是一樣的。需要注意的是子UpdatePanel裡的控件並不會引起父UpdatePanel的更新,需要顯示的申明為觸發器或者調用父UpdatePanel的Update()方法。

注意:如果ChildrenAsTriggers設為false,則UpdateMode的值必須設為conditional,否則就會拋出異常。默認情況下UpdateMode的值為always。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved