服務熱線
153 8323 9821
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