updatepanel小結

 上週知道的updatepanel,於是這個星期一直在使用和研究,下面是一個小小總結:

1)簡單原理

上網找了找,覺得下面的解釋比較好理解:當ScriptManager中允許頁面局部更新時,它會以異步的方式回傳給服務器,與傳統的整頁回傳方式不同的是隻有包含在UpdatePanel中的頁面部分會被更新,在從服務端返回HTML之後,PageRequestManager會通過操作DOM對象來替換需要更新的代碼片段。

2)按鈕組件,或者提交代碼組件在updatepanle裏面:

   不會更新頁面,但是會提交結果,更新updatepanel中的內容。這裏說明下,貌似頁面所有的updatapanel都會更新。

   1,如果更新內容在updatepanel內:刷新內容。

   2,如果提交組件在updatepanel外:由於組件在updatepanel外,所以客戶端頁面不刷新內容;但是在服務器端已經執行了代碼,所以更新組件在服務器端已經更新了內容。但是客戶端卻無法獲取更新。

3)客戶端更改了頁面的內容: 不管是否在updatepanel,如果是label,更改了內容後,在服務器端沒有變化。如果是textbox,在服務器端同時更新text。所以服務器端和客戶端交互數據的時候,我覺得也可以用隱藏的textbox來進行。

4)如果有dropdownlist在這個updatepanel裏面的話,如果是動態初始值的,那麼提交數據後,無論如何也得不到真實的下拉選項,都只能得到默認的值。所以有下拉選框的時候,拿出來,不要放在updatepanel裏面,動態賦值,同時不回傳,這樣才能在服務器端取到真實的值。同時,如果這個下拉框有數據源,在頁面屬性中配置其數據源,則即使放在updatepanel中,這個下拉框的真實選項仍然能被服務器識別。(真繞)

5)疑問:

     如果提交組件在updatepanel內,頁面局部更新。對於cs文件中的全局變量,有點不解。

     在本次更新的時候,全局變量更改成功。但是下次別的組件(也在updatepanel中)取這個全局變量的時候,仍然是沒有更新之前的。這樣,就無法共同讀取一個全局變量了。不知道怎麼解決。

     只能用viewstate來存儲數據,而且不能放在全局變量中初始化。只能在page_load事件中或者函數中賦值,否則和全局變量一樣有問題。而且這個不能頁面間傳值,只能用隱藏域傳值

發佈了46 篇原創文章 · 獲贊 6 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章