DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> AJAX入門 >> AJAX詳解 >> AJAX之ScriptManager和UpdatePanel控件的使用
AJAX之ScriptManager和UpdatePanel控件的使用
編輯:AJAX詳解     
ScriptManager和UpdatePanel控件聯合使用可以實現頁面異步局部更新的效果。其中的UpdatePanel就是設置頁面中異步局部更新區域,它必須依賴於ScriptManager存在,因為ScriptManger控件提供了客戶端腳本生成與管理UpdatePanel的功能。
幾個重要的屬性:
    ScriptManager控件的EnablePartialRendering屬性:true-實現頁面的異步局部更新;false-實現全頁面的刷新。
    UpdatePanel控件的RenderMode屬性:InLine-UpdatePanel控件被解析成HTML的<span>標記;Block-UpdatePanel控件被解析成Html控件的<DIV>。
    UpdatePanel控件的UpdateMode屬性:Always-UpdatePanel頁面上任何一處發生的回發操作都會產生頁局部更新;Conditional-只在特定的情況下才產頁面的回發,如執行UpdatePanel控件的update()方法或在指定的觸發器的操作下。
    UpdatePanel控件的ChildAsTrigger屬性:指示UpdatePanel內部控件引起的回發是否產生當前UpdatePanel控件的局部更新。如果UpdateMode設為Always的話,那ChildAsTrigger局性必須設為True,否則運行出錯。

一、UpdatePanel內部的控件引起的回發,來更新當前UpdatePanel內部的控件內容:
    1.向頁面中加入ScriptManager、UpdatePanel控件和一個Label控件(Label2)。
    2.在UpdatePanel中加入一個Button、一個Label(Label1)。
    3.雙擊Button在事件處理程序中寫入下列代碼:Label1.Text = DateTime.Now.ToString();
    4.在Page_Load事件中寫入下列代碼:Label2.Text = DateTime.Now.ToString();
    5.運行頁面,發現每次點擊按鈕都會產生異步局步刷新,只有Label1的內容發生更改,頁面上的Label2時間沒有發生更改。
   
    代碼如下:
        <asp:Label ID="Label2" runat="server" Text="Label"></ASP:Label>
        <ASP:ScriptManager ID="ScriptManager1" runat="server">
        </ASP:ScriptManager>
        <ASP:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="True">
            <ContentTemplate>
                <asp:Label ID="Label1" runat="server"></ASP:Label>
                <br />
                <ASP:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
            </ContentTemplate>
        </ASP:UpdatePanel>
       
        protected void Button1_Click(object sender, EventArgs e)
        {
            Label1.Text = DateTime.Now.ToString(); ;
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            Label2.Text = DateTime.Now.ToString();
        }
       注意:此時的ScriptManager的EnablePartialRendering屬性應設為true。UpdatePanel的UpdateMode屬性應設為Always。ChildAsTrigger屬性應設為true。

二、UpdatePanel控件外部的控件引起的回發,來異步更新UpdatePanel內部的內容:
    雖然上面的方式能夠很簡單地實現異步局部更新的功能,但就性能方面考慮,我們應當只將數據確實會發生變化的控件擺放在UpdatePanel中,這就可能會出現引起回發的控件不在UpdatePanel內的情況。
    有兩種方式實現這種效果:
    a.在Page_Load方法中用ScriptManager1.RegisterAsyncPostBackControl()來注冊一下要實現異步更新的控件。
    b.用觸發器來實現。
   
    1、ScriptManager1.RegisterAsyncPostBackControl()注冊的控件可以實現對所有的UpdatePanel控件的異步更新。
        如:ScriptManager1.RegisterAsyncPostBackControl(this.Button2);實現對Button2的注冊,那此時Button2的回發就變成一個異步回發(頁面不會刷新),它會導致頁面上所有的UpdatePanel的內容的更新。
        注意:此時的ScriptManager的EnablePartialRendering屬性應設為true。UpdatePanel的UpdateMode屬性應設為Always。
    2、ScriptManager1.RegisterAsyncPostBackControl()注冊的控件可以實現針對特定UpdatePanel控件的異步更新。
       a.把頁面上所有的UpdatePanel控件的UpdateMode設為Conditional。
       b.ScriptManager1.RegisterAsyncPostBackControl(this.Button2);實現對Button2的注冊。
       c.在Button2控件的Click事件中後面加入後面的代碼:UpdatePanel1.Update();
       這樣Button2按鈕只對UpdatePanel1控件實現的異步的局部刷新。
       注意:這裡的UpdatePanel的屬性要設為Conditional,如果還是Always的話,會出現所有的UpdatePanel都刷新的效果。
    3、觸發器
        如果頁面上有多個UpdatePanel控件,如果要實現外部的控件的回發引發指定UpdatePanel的更新的話,那應當為要實現刷新的UpdatePanel控件建立一個觸發器。
       a.選中要進行局部更新的UpdatePanel控件。
       b.在其屬性頁中點擊Triggers集合屬性右邊的小按鈕。
       c.在彈出的對話框中,的成員列表中添加一個AsyncPostBackTriggers成員。
       d.指定AsyncPostBackTriggers成員的ControlID和EventName,即引發異步回送的控件的ID和該控件的事件。
       完成以上步驟後,切換到Html頁面就會出現下列代碼:
            <ASP:UpdatePanel ID="UpdatePanel2" runat="server" RenderMode="Inline" UpdateMode="Conditional">
                <ContentTemplate>
                    <asp:Label ID="Label3" runat="server" Text="Label"></ASP:Label>
                </ContentTemplate>
                <Triggers>
                    <ASP:AsyncPostBackTrigger ControlID="Button2" EventName="Click" />
                </Triggers>
            </ASP:UpdatePanel>
            <ASP:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="ButtonOut" />
        這裡需要大家注意的是:
           把所有的UpdatePanel控件的UpdateMode設為"Conditional",這樣才能夠針對建有相關觸發器的UpdatePanel更新。
           一個UpdatePanel上可以建有多個觸發器,實現在不同的情況下對該UpdatePanel控件內容的更新。
          
三、兩個UpdatePanel控件,其中一個UpdatePanel內的控件引發兩個UpdatePanel控件的同時刷新。
    a.在頁面上放入兩個UpdatePanel和一個ScriptManager控件。
    b.在UpdatePanel1中加入一個標簽Label1、一個按鈕Button1 ,在UpdatePanel2中加入一個標簽Label2。
    c.將UpdatePanel1和UpdatePanel2兩個控件的的UpdateMode屬性設為"Always"
    c.在Button1的Click事件中加入下面的代碼:
        protected void Button1_Click(object sender, EventArgs e)
        {
            Label1.Text = DateTime.Now.ToString();
            Label2.Text = DateTime.Now.ToString();
        }
   
四、兩個UpdatePanel控件,其中一個UpdatePanel內的控件引發當前的UpdatePanel控件的刷新,而另一個不刷新。
    a.步驟和上面的(三)一樣
    b.要把UpdatePanel1和UpdatePanel2兩個控件的UpdateMode屬性設為Conditional   
            <ASP:ScriptManager ID="ScriptManager1" runat="server">
            </ASP:ScriptManager>
            <ASP:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
                <ContentTemplate>
                    <asp:Label ID="Label1" runat="server" Text="Label"></ASP:Label>
                    <br />
                    <ASP:Button ID="Button1" runat="server" OnClick="Button1_Click1" Text="更新兩個UpdatePanel" />
                </ContentTemplate>
            </ASP:UpdatePanel>
            <ASP:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
                <ContentTemplate>
                    <asp:Label ID="Label2" runat="server" Text="Label"></ASP:Label>
                </ContentTemplate>
            </ASP:UpdatePanel>
五、兩個UpdatePanel控件,其中一個UpdatePanel內的控件引發另一個UpdatePanel控件的刷新,而本身不刷新。
    a.步驟和上面的(四)一樣
    b.把UpdatePanel1和UpdatePanel2的ChildrenAsTriggers屬性設為false
    c.在UpdatePanel2控件中加入一個觸發器,觸發源設到UpdatePanel1控件內的Button1的Click事件上。
            <ASP:ScriptManager ID="ScriptManager1" runat="server">
            </ASP:ScriptManager>
            <ASP:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="False">
                <ContentTemplate>
                    <asp:Label ID="Label1" runat="server" Text="Label"></ASP:Label>
                    <br />
                    <ASP:Button ID="Button1" runat="server" OnClick="Button1_Click1" Text="更新兩個UpdatePanel" />
                </ContentTemplate>
            </ASP:UpdatePanel>
            <ASP:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
                <ContentTemplate>
                    <asp:Label ID="Label2" runat="server" Text="Label"></ASP:Label>
                </ContentTemplate>
                <Triggers>
                    <ASP:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
                </Triggers>
            </ASP:UpdatePanel>
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved