UpdatePanel的簡單用法(1)

         局部更新是ajax技術的最基本,也是最重要的用法,今天大概把asp.net ajax中的局部更新控件 updatepanel的用法記錄下,大家可以共同探討
 
UpdatePanel控制頁面的局部更新,這個更新功能依賴於scriptManger控件的EnablePartialRendering屬性,如果這個屬性設置爲false局部更新會失去作用(scriptManger控件的EnablePartialRendering屬性的默認值爲true不必刻意去設置)
下面是一個完整的UpdatePanel的結構:

  1.     <asp:ScriptManager ID="ScriptManager1" runat="server" >
  2.     </asp:ScriptManager>
  3.     <asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="true" UpdateMode="Always" RenderMode="Block">
  4.         <ContentTemplate>
  5.         </ContentTemplate>
  6.        <Triggers>
  7.        <asp:AsyncPostBackTrigger />
  8.        <asp:PostBackTrigger />
  9.        </Triggers>
  10.     </asp:UpdatePanel>
主要屬性:

1,ChildrenAsTriggers : 內容模板內的子控件的回發是否更新本模板(和UpdateMode的conditional有關)
2,UpdateMode            : 內容模板的更新模式,有always和conditional倆種
                        always:每次ajax PostBack或者普通的PostBack都能引起panel的更新  如果UpdatePanel設置爲Always時,不能使用上面的ChildrenAsTriggers屬性,強行使用會報錯,是updatepanel默認的更新模式,和設置trigger觸發器沒有直接的關係。
                        conditional:只有滿足如下某一條件時才更新panel的內容    
                                    如果設置UpdateMode="conditional" ChildrenAsTriggers="false"時候,子控件不允許觸發更新
                                 1),當panel中的某個控件引發PostBack時
                                 2),  當Panel指定的某個Trigger被引發時
3,RenderMode:       局部更新控件的呈現形式,倆中,Block(局部更新在客戶端以div形式展現)和Inline(局部更新以span的形式展現在客戶端)

子元素: 

1,contentTemplate: 局部更新控件的內容模板,可以在其中添加任何控件
2,Triggers:   局部更新的觸發器,包括倆中:異步回發(AsyncPostBackTrigger) 用來實現局部更新。普通回發(PostBackTrigger)和普通的一養,不管是否使用了局部更新控件,都會引起頁面的全部更新。

下面是幾個簡單的例子:

1,updatepanel的updatemode設置爲always
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head runat="server">
  5.     <title>無標題頁</title>
  6. </head>
  7. <body>
  8.     <form id="form1" runat="server">
  9.     <div>
  10.     
  11.     </div>
  12.     <asp:ScriptManager ID="ScriptManager1" runat="server">
  13.     </asp:ScriptManager>
  14.     <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always">
  15.     <ContentTemplate>
  16.     <% =DateTime.Now.ToString()%>
  17.         <asp:Button ID="Button1" runat="server" Text="UpdatePanelButton" />
  18.     </ContentTemplate>
  19.     </asp:UpdatePanel>
  20.     <asp:Button ID="Button2" runat="server" Text="Button" />
  21.     </form>
  22. </body>
  23. </html>
不管哪個按鈕,都會觸發更新,只不過外面的按鈕postback的時候頁面顯示回發而已 !

1,updatepanel的updatemode設置爲conditional( ChildrenTriggers="false" 就是updatepanel中事件不觸發更新)

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head runat="server">
  5.     <title>無標題頁</title>
  6. </head>
  7. <body>
  8.     <form id="form1" runat="server">
  9.     <div>
  10.     
  11.     </div>
  12.     <asp:ScriptManager ID="ScriptManager1" runat="server">
  13.     </asp:ScriptManager>
  14.     <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false">
  15.     <ContentTemplate>
  16.     <% =DateTime.Now.ToString()%>
  17.         <asp:Button ID="Button1" runat="server" Text="UpdatePanelButton" />
  18.     </ContentTemplate>
  19.     </asp:UpdatePanel>
  20.     <asp:Button ID="Button2" runat="server" Text="Button" />
  21.     </form>
  22. </body>
  23. </html>

下面介紹下updatePanel的觸發器Trigger

瞭解數據庫的人應該對觸發器這個概念比較清楚,Trigger對於UpdatePanel來說也是很關鍵的

開始簡單介紹了UpdatePanel的倆中觸發器asyncPostBackTrigger和PostBackTrigger的作用
這裏用例子大概在稍微深入地介紹下:

1,普通回調觸發器(PostBackTrigger)

PostBackTrigger主要針對UpdatePanel模板內的子控件,因爲當子控件被觸發時。它只會更新模版內的數據,模板外的控件不會發生變化.當需要更新全局 內容的時候就可以通過PostBackTrigger觸發器來實現頁面的全部回調。

下面是簡單例子:

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head runat="server">
  5.     <title>無標題頁</title>
  6. </head>
  7. <body>
  8.     <form id="form1" runat="server">
  9.     <div>
  10.     
  11.     </div>
  12.     <asp:ScriptManager ID="ScriptManager1" runat="server">
  13.     </asp:ScriptManager>
  14.     <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always">
  15.     <ContentTemplate>
  16.     <% =DateTime.Now.ToString()%>
  17.         <asp:Button ID="Button1" runat="server" Text="UpdatePanelButton" />
  18.     </ContentTemplate>
  19.     <Triggers>
  20. <!--下面的註釋掉,點擊updatePanel內的button則只更新Panel內的時間,取消註釋責全部更新-->
  21.    <!-- <asp:PostBackTrigger ControlID="Button1"/>-->
  22.     </Triggers>
  23.     </asp:UpdatePanel>
  24.     <br />
  25.      <% =DateTime.Now.ToString()%>
  26.     <asp:Button ID="Button2" runat="server" Text="Button" />
  27.     </form>
  28. </body>
  29. </html>

2,異步回調觸發器(AsyncPostBackTrigger)

是實現局部更新的關鍵,在觸發器內定義引起回發的控件和事件

例:

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head runat="server">
  5.     <title>無標題頁</title>
  6. </head>
  7. <body>
  8.     <form id="form1" runat="server">
  9.     <asp:ScriptManager ID="ScriptManager1" runat="server">
  10.     </asp:ScriptManager>
  11.     <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always">
  12.     <ContentTemplate>
  13.     <% =DateTime.Now.ToString()%>
  14.     </ContentTemplate>
  15.     <Triggers>
  16.    <asp:AsyncPostBackTrigger ControlID="Button2" EventName="Click" />
  17.     </Triggers>
  18.     </asp:UpdatePanel>
  19.     <br />
  20.      <% =DateTime.Now.ToString()%>
  21.     <asp:Button ID="Button2" runat="server" Text="Button" />
  22.     </form>
  23. </body>
  24. </html>
運行了發現點擊button2的時候只更新了 updatepanel內部的時間
上面的例子也可以動態更新UpdatePanel的一些源代碼:
具體例子就不寫了下面 大概寫點主要代碼:

  1.     protected void Page_Load(object sender, EventArgs e)
  2.     {
  3.            //獲取更新控件兒
  4.             UpdatePanel mapanel = UpdatePanel1;
  5.           //設置觸發模式
  6.             mapanel.UpdateMode = UpdatePanelUpdateMode.Conditional;
  7.            //顯示時間
  8.             Label1.Text = DateTime.Now.ToString();
  9.             //添加觸發
  10.             AsyncPostBackTrigger tri = new AsyncPostBackTrigger();
  11.             tri.ControlID = "Button2";
  12.             tri.EventName = "Click";
  13.             mapanel.Triggers.Add(tri);
  14.      
  15.     }



先記錄這些~還望多多大蝦們多多指教 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章