日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

使用 UpdatePanel

系統(tǒng) 2060 0
1 概述
ASP.NET UpdatePanel 控件能讓你創(chuàng)建豐富的、以客戶為中心的 Web 應(yīng)用程序。使用 UpdatePanel 控件,可以刷新選擇的頁面部分而不是使用回發(fā)來刷新整個頁面,這就像是執(zhí)行了一個局部頁面更新一樣。包含一個 ScriptManager 和一個或多個 UpdatePanel 的 Web 頁面會自動加入局部頁面更新,而不需要定制客戶端代碼。

1.1 場景
UpdatePanel 是一個服務(wù)器控件,可以幫助你開發(fā)使用復(fù)雜客戶端行為的 Web 頁面,使 Web 頁面呈現(xiàn)更多的交互給用戶。服務(wù)器和客戶端之間協(xié)調(diào)以僅更新指定的頁面部分通常需要很深的 ECMAScript(Javascript)知識。然而,通過使用UpdatePanel 控件,可以不用編寫任何客戶端腳本就可以給頁面加入局部頁面更新。如果你愿意,可以添加定制的客戶端腳本以增強客戶端用戶體驗。在使用 UpdatePanel 控件時,頁面行為是獨立于瀏覽器的,并且潛在的減少了客戶端和服務(wù)器的數(shù)據(jù)傳輸量。

1.2 背景
UpdatePanel 的工作是指定無須刷新整個頁面就可以更新的區(qū)域,這個過程由 ScriptManager 服務(wù)器控件和客戶端 PageRequestManager 類進行協(xié)調(diào)。當局部更新可用時,控件可以異步的發(fā)送到服務(wù)器。異步回發(fā)的行為和常規(guī)回發(fā)一樣,結(jié)果服務(wù)器頁面會執(zhí)行完整的頁面和控件生命周期。然而,使用異步回發(fā),頁面更新僅限于封閉在 UpdatePanel 控件中標記為更新的頁面區(qū)域。服務(wù)器僅為受影響的元素發(fā)送 HTML 標記到瀏覽器。在瀏覽器中,客戶端 PageRequestManager 類執(zhí)行文檔對象模型 ( DOM ) 操作用更新的標記替換得已有的 HTML 。下面的圖例展示了頁面的第一次加載,和后來的刷新 UpdatePanel 控件的內(nèi)容的異步回發(fā)。
使用 UpdatePanel

2 UpdatePanel 的使用
UpdatePanel 的基本使用方法非常簡單,向頁面中添加一個 SciprtManager 控件和一個或多個 UpdatePanel 控件,再把要局部更新的頁面元素和觸發(fā)更新的控件放到 UpdatePanel 控件的 ContentTemplate 屬性中即可。如下列代碼所示,在其中添加了一個 Button 控件:
?1 < asp:UpdatePanelID = " UpdatePanel1 "
?2 ????????UpdateMode = " Conditional "
?3 ????????runat = " server " >
?4 ???? < ContentTemplate >
?5 ???????? < asp:Button?ID = " Button1 "
?6 ????????????Text = " RefreshPanel "
?7 ????????????runat = " server " />
?8 ???? </ ContentTemplate >
?9 </ asp:UpdatePanel >
10
要使用 UpdatePanel 控件可用,必須設(shè)置 ScriptManager 的 EnablePartialRendering? 屬性為 true 。
UpdatePanel 控件可以輸出為 <div> 元素或 <span> 元素,以在頁面中形成一個塊或內(nèi)聯(lián)的區(qū)域,可以設(shè)置其 RenderMode 屬性為 Block ( 默認,<div>)或 Inline ( <span> ) 來指定。

2.1 指定 UpdatePanel 的內(nèi)容
可以使用 ContentTemplate 屬性以聲明的方式或者在設(shè)計器中添加內(nèi)容到 UpdatePanel 控件中。在標記中,這個屬性顯示為 <ContentTemplate> 元素。如果要以編程的方式添加內(nèi)容,可以使用 ContentTemplateContainer 屬性。
包含一個或多個 UpdatePanel 控件的頁面在第一次輸出時,所有 UpdatePanel 控件中的內(nèi)容都會被輸出并被發(fā)送到瀏覽器。在后來的異步更新中,單個 UpdatePanel 控件中的內(nèi)容可能會被更新。更新依賴于面板的設(shè)置、導(dǎo)致回發(fā)的元素以及指定給每個面板的代碼。

2.2 指定 UpdatePanel 的觸發(fā)器
默認情況下,UpdatePanel 控件中的任何控件回發(fā)都將導(dǎo)致異步回發(fā)并刷新面板的內(nèi)容。然而,也可以配置頁面中且不在面板中的其他控件來刷新 UpdatePanel 控件。可以為 UpdatePanel 控件定義一個觸發(fā)器來完成此目的。觸發(fā)器是指定哪個回發(fā)控件和事件來導(dǎo)致面板的更新的綁定。當觸發(fā)器控件指定的事件觸發(fā)時(如一個按鈕的 Click 事件),更新面板將被刷新。
下列示例展示了如何添加一個觸發(fā)器到 UpdatePanel 面板中去。
< asp:Button?ID = " Button1 "
?????????Text
= " Refresh?Panel "
??????????runat
= " server " ? />
< asp:ScriptManager?ID = " ScriptManager1 "
??????????runat
= " server " ? />
< asp:UpdatePanel?ID = " UpdatePanel1 " ???UpdateMode = " Conditional " ?runat = " server " >
?????????
< Triggers >
????????????????
< asp:AsyncPostBackTrigger?ControlID = " Button1 " ? />
????????
</ Triggers >
???????
< ContentTemplate >
??????????????
< fieldset >
??????????????????
< legend > UpdatePanel?內(nèi)容 </ legend >
??????????????????
<%= DateTime.Now.ToString()? %>
??????????????
</ fieldset >
???????
</ ContentTemplate >
</ asp:UpdatePanel >
觸發(fā)器由在 UpdatePanel 控件的 <Triggers> 元素中的 <asp:AsyncPostBackTrigger> 元素定義。(如果是在 Visual Studio 中編輯頁面,就可以在 UpdatePanel 的屬性面板中單擊 Triggers 屬性后面的省略號按鈕打開一個 UpdatePanelTrigger 集合編輯器對話框來創(chuàng)建觸發(fā)器。)觸發(fā)器必要的屬性是 ControlID ,用它來指定可以導(dǎo)致面板更新的控件的 ID 。
有上例中,雖然按鈕沒有聲明在面板中,但是由于在面板中指定了它為觸發(fā)器,所以當按鈕事件觸發(fā)時,會產(chǎn)生其被包含中面板中同樣的結(jié)果,即面板被更新。
觸發(fā)器控件的事件是可選的,如果沒有指定事件,觸發(fā)器將使用控件的默認事件。例如,對于 Button 控件,默認事件就是 Click 事件。

2.3 在母版頁中使用 UpdatePanel
要在母版頁中使用 UpdatePanel 控件,必須確定如何使用 ScriptManager 控件。如果在母版頁面中放置了一個 ScriptManater 控件,則 ScriptManager 控件可以在所有的內(nèi)容面中起作用。(如果要在內(nèi)容頁中聲明腳本或服務(wù),可以在頁面中添加一個 ScriptManagerProxy,它具有和 ScriptManager 差不多一樣的屬性和方法。)
如果在母版頁中沒有包含 ScriptManager 控件,就必須在包含 UpdatePanel 控件的每個內(nèi)容頁是都要放置一個 ScriptManager 控件,設(shè)計的選擇依賴于在應(yīng)用程序中將如何管理客戶端腳本。
如果在母版頁中包含了 ScriptManager 控件,而在某個內(nèi)容頁中又不打算使用局部頁面輸出的功能時,必須用程序設(shè)置內(nèi)容中的 ScriptManager 控件的 EnablePartialRendering 為 false? 。

2.4 使用嵌套的 UpdatePanel 控件
UpdatePanel 控件可以嵌套使用,如果父面板被刷新,則所有嵌套的面板也都會被刷新。
下列代碼展示了如何在一個 UpdatePanel 控件中定義另一個 UpdatePanel 控件。
?1 <% @?Page?Language = " C# " ? %>
?2 <! DOCTYPE?html?PUBLIC? " -//W3C//DTD?XHTML?1.0?Transitional//EN "
?3 ? " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >
?4 < html?xmlns = " http://www.w3.org/1999/xhtml " >
?5 < head?id = " Head1 " ?runat = " server " >
?6 ???? < title > UpdatePanelUpdateMode?示例 </ title >
?7 ???? < style?type = " text/css " >
?8 ????div.NestedPanel
?9 ???? {
10 ??????position:?relative;
11 ??????margin:? 2 % ? 5 % ? 2 % ? 5 % ;
12 ????}

13 ???? </ style >
14 </ head >
15 < body >
16 ???? < form?id = " form1 " ?runat = " server " >
17 ???????? < div >
18 ???????????? < asp:ScriptManager?ID = " ScriptManager "
19 ???????????????????????????????runat = " server " ? />
20 ???????????? < asp:UpdatePanel?ID = " OuterPanel "
21 ?????????????????????????????UpdateMode = " Conditional "
22 ?????????????????????????????runat = " server " >
23 ???????????????? < ContentTemplate >
24 ???????????????????? < div >
25 ???????????????????????? < fieldset >
26 ???????????????????????????? < legend > 外層?Panel? </ legend >
27 ???????????????????????????? < br? />
28 ???????????????????????????? < asp:Button?ID = " OPButton1 "
29 ????????????????????????????????????????Text = " 外層面板按鈕 "
30 ????????????????????????????????????????runat = " server " ? />
31 ???????????????????????????? < br? />
32 ????????????????????????????最后更新在:
33 ???????????????????????????? <%= ?DateTime.Now.ToString()? %>
34 ???????????????????????????? < br? />
35 ???????????????????????????? < br? />
36 ???????????????????????????? < asp:UpdatePanel?ID = " NestedPanel1 "
37 ???????????????????????????????????????????????UpdateMode = " Conditional "
38 ???????????????????????????????????????????????runat = " server " >
39 ???????????????????????????????? < ContentTemplate >
40 ???????????????????????????????????? < div? class = " NestedPanel " >
41 ???????????????????????????????????????? < fieldset >
42 ???????????????????????????????????????????? < legend > 嵌套面板 </ legend >
43 ???????????????????????????????????????????? < br? />
44 ????????????????????????????????????????????最后更新在:
45 ???????????????????????????????????????????? <%= ?DateTime.Now.ToString()? %>
46 ???????????????????????????????????????????? < br? />
47 ???????????????????????????????????????????? < asp:Button?ID = " NPButton1 "
48 ????????????????????????????????????????????????????????Text = " 嵌套面板按鈕 "
49 ????????????????????????????????????????????????????????runat = " server " ? />
50 ???????????????????????????????????????? </ fieldset >
51 ???????????????????????????????????? </ div >
52 ???????????????????????????????? </ ContentTemplate >
53 ???????????????????????????? </ asp:UpdatePanel >
54 ???????????????????????? </ fieldset >
55 ???????????????????? </ div >
56 ???????????????? </ ContentTemplate >
57 ???????????? </ asp:UpdatePanel >
58 ???????? </ div >
59 ???? </ form >
60 </ body >
61 </ html >
62

2.5 用程序創(chuàng)建 UpdatePanel 控件
要用程序添加一個 UpdatePanel 控件到頁面中,可以先創(chuàng)建一個新的 UpdatePanel 實例,然后使用它的 ContentTemplateContainer 屬性的 Add( Control ) 方法來添加其他控件。不能直接使用 ContentTemplate? 屬性來添加控件。
如果 UpdatePanel 控件是程序添加的,只有來自同樣命名容器如 UpdatePanel 控件中控件的回發(fā)才可以被使用為面板的觸發(fā)器。
下列代碼演示了如何用程序添加 UpdatePanel 控件。
<% @?Page?Language = " C# " ? %>
<! DOCTYPE?html?PUBLIC? " -//W3C//DTD?XHTML?1.0?Transitional//EN "
?
" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >
< script?runat = " server " >
????
protected ? void ?Page_Load( object ?sender,?EventArgs?e)
????
{
????????UpdatePanel?up1?
= ? new ?UpdatePanel();
????????up1.ID?
= ? " UpdatePanel1 " ;
????????up1.UpdateMode?
= ?UpdatePanelUpdateMode.Conditional;
????????Button?button1?
= ? new ?Button();
????????button1.ID?
= ? " Button1 " ;
????????button1.Text?
= ? " Submit " ;
????????button1.Click?
+= ? new ?EventHandler(Button_Click);
????????Label?label1?
= ? new ?Label();
????????label1.ID?
= ? " Label1 " ;
????????label1.Text?
= ? " A?full?page?postback?occurred. " ;
????????up1.ContentTemplateContainer.Controls.Add(button1);
????????up1.ContentTemplateContainer.Controls.Add(label1);
????????Page.Form.Controls.Add(up1);

????}

????
protected ? void ?Button_Click( object ?sender,?EventArgs?e)
????
{
????????((Label)Page.FindControl(
" Label1 " )).Text? = ? " Panel?refreshed?at? " ? +
????????????DateTime.Now.ToString();
????}

</ script >
< html?xmlns = " http://www.w3.org/1999/xhtml " >
< head?id = " Head1 " ?runat = " server " >
????
< title > UpdatePanel?Added?Programmatically?Example </ title >
</ head >
< body >
????
< form?id = " form1 " ?runat = " server " >
????????
< div >
????????????
< asp:ScriptManager?ID = " TheScriptManager "
???????????????????????????????runat
= " server " ? />
????????
</ div >
????
</ form >
</ body >
</ html >


3 UpdatePanel 的關(guān)鍵屬性
ChildrenAsTriggers:
指示來自 UpdatePanel 控件的直接子控件的回發(fā)是否更新面板的內(nèi)容。設(shè)置為 true 時更新,否則不更新,默認為 true 。如果此屬性設(shè)置為 false ,UpdatePanel 控件的 UpdateMode 就必須設(shè)置為 Conditional ,否則會拋出 InvalidOperationException 異常。
UpdateMode:
指示什么時候需要更新面板。當一個 UpdatePanel 控件沒有包含在另一個 UpatePanel 控件中時,面板的更新是根據(jù) UpdateMode 、ChildrenAsTriggers 屬性的設(shè)置,以及觸發(fā)器的集合來進行的。當一個 UpdatePanel 控件在另一個 UpdatePanel 控件內(nèi)部時,子面板會自動在父面板更新時更新。
UpdatePanel 控件的內(nèi)容在下列情形下會更新:
  • 如果 UpdateMode 屬性設(shè)置為 Alwarys 時,UpdatePanel 控件中的內(nèi)容會在源自頁面上任何地方的每個回發(fā)時更新。這包括由包含在其他 UpdatePanel 控件中的控件的回發(fā)和沒有在 UpdatePanel 控件中的回發(fā)。
  • 如果 UpdatePanel 控件嵌套在另一個 UpdatePanel 控件中時,父面板更新時它也會被更新。
  • 如果 UpdateMode 屬性被設(shè)置為 false 時,且出現(xiàn)下列條件之一時:
    • 顯式調(diào)用 UpdatePanel 控件的 Update() 方法。
    • 由 UpdatePanel 控件中的 Triggers 屬性定義的觸發(fā)器控件引起的回送。在這種情況下,控件會顯式的觸發(fā)面板內(nèi)容的更新。定義為觸發(fā)器的控件可以在 UpdatePanel 控件的內(nèi)部也可以在其外部。
    • ChildrenAsTriggers 屬性設(shè)置為 true ,并且是由 UpdatePanel 控件中的子控件導(dǎo)致的回發(fā)。在嵌套的 UpdatePanel 控件中的子控件不會引起外層 UpdatePanel 控件的更新,除非顯示的定義為觸發(fā)器。
4 總結(jié)
由以上內(nèi)容可以看出,使用 UpdatePanel 控件可以方便的幫助大家開發(fā)出具有 AJAX 特性的 ASP.NET 應(yīng)用程序來。當然,它也不是萬能的,過度的使用會引起一定的性能開銷,同時它還與現(xiàn)在的部分 ASP.NET 控件不兼容,如 TreeView、Menu,以及 WebParts 控件等。
?
TrackBack:http://www.cnblogs.com/cxy521/archive/2008/01/22/1048264.html

使用 UpdatePanel


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 资中县| 西华县| 蕲春县| 怀集县| 绥棱县| 慈溪市| 肥城市| 罗定市| 上饶县| 阿合奇县| 遂溪县| 怀来县| 蓝山县| 彭州市| 马龙县| 陇南市| 防城港市| 台中县| 榆中县| 尤溪县| 渭源县| 海盐县| 罗甸县| 台湾省| 鄂托克旗| 自治县| 云南省| 阿克陶县| 华坪县| 兰西县| 交口县| 库车县| 元氏县| 澎湖县| 重庆市| 磴口县| 嘉鱼县| 怀来县| 周宁县| 呼玛县| 依兰县|