自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ASP.NET中PostBack和ViewState

開發(fā) 后端
本文介紹ASP.NET中PostBack和ViewState,對(duì)PostBack進(jìn)行了一些研究,現(xiàn)在看來(lái)研究的還是不夠深入。

ASP.NET中PostBack和ViewState

關(guān)于PostBack,我曾經(jīng)也寫過(guò)一篇博客《深入理解doPostBack》。在這篇文章里有對(duì)PostBack進(jìn)行了一些研究,現(xiàn)在看來(lái)研究的還是不夠深入。不過(guò)從原理上來(lái)說(shuō),ASP.NET WebForm中的一般WEB控件(為什么是一般呢?因?yàn)槿鏐utton等少數(shù)控件不是調(diào)用doPostBack方法的)在向服務(wù)器回發(fā)請(qǐng)求時(shí),調(diào)用的就是doPostBack方法,通過(guò)表單提交的方式來(lái)向服務(wù)器提交請(qǐng)求。而WebForm所提供的WEB事件模型也是以doPostBack這個(gè)方法為基礎(chǔ)的,往服務(wù)器傳送的兩個(gè)隱含變量(EVENTTARGET,EVENTARGUMENT)就是PostBack事件分發(fā)的根據(jù)。EVENTTARGET保存著向服務(wù)器發(fā)出PostBack請(qǐng)求的控件ID,ASP.NET根據(jù)這個(gè)ID就可以找到它所對(duì)象的服務(wù)器端控件的實(shí)例。EVENTARGUMENT保存的是當(dāng)前PostBack的一些參數(shù)。除此之外,PostBack還需要什么條件呢?

在前段時(shí)間關(guān)于WebForm和MVC的討論中,有人提到禁用了ViewState,也就無(wú)法使用了PostBack。這也給我提了一個(gè)醒,確實(shí)ViewState與PostBack有非常緊密的關(guān)系,在大多數(shù)情況下,如果控件的狀態(tài)是動(dòng)態(tài)維護(hù)的。比如說(shuō)DropDownList的Items是通過(guò)下面的代碼添加的:

  1. protectedvoidPage_Load(objectsender,EventArgse)  
  2. {  
  3. if(!this.IsPostBack)  
  4. {  
  5. DropDownList1.Items.Add(newListItem("1","Value1"));  
  6. DropDownList1.Items.Add(newListItem("2","Value2"));  
  7. }  

而不是在HTML頁(yè)面上靜態(tài)添加(或是在OnInit事件之前添加,不能加IsPostBack的判斷),這時(shí),如果禁用ViewState,那么DropDownList的SelectedIndexChanged事件將不會(huì)被正常觸發(fā),并且DropDownList的Item項(xiàng)將會(huì)被清空。所以從這個(gè)角度來(lái)說(shuō),如果要使用PostBack,那么ViewState勢(shì)必不能被禁用。

除此之外,PostBack還有一些不足:

1)頁(yè)面在PostBack后,刷新頁(yè)面時(shí)會(huì)出現(xiàn)非常不好的用戶體驗(yàn)。

2)搜索引擎的不友好。

3)在編寫服務(wù)器端代碼時(shí)要特別的小心,特別是對(duì)IsPostBack的判斷。

盡管PostBack在WebForm的事件機(jī)制占有舉足輕重的地位,它出現(xiàn)極大的方便了我們以事件驅(qū)動(dòng)方式來(lái)開發(fā)WEB應(yīng)用。從短期的入門應(yīng)用中確實(shí)有它重要的意義。但從現(xiàn)實(shí)出發(fā),還是必須得根據(jù)不同的應(yīng)用場(chǎng)合有先擇性的使用。在網(wǎng)站前臺(tái)型應(yīng)用中,應(yīng)該消滅一切可以消滅的PostBack。因?yàn)樽鰹榍芭_(tái),它的作用就是展示還有查詢。而如果對(duì)查詢,分頁(yè)等操作使用PostBack的話,一方面搜索引擎的不友好,另一方面給大多數(shù)用戶帶來(lái)非常不好的用戶體驗(yàn),增加了整個(gè)頁(yè)面的請(qǐng)求時(shí)間。同時(shí),它們所傳的參數(shù)又非常有限,這情況下就需要使用鏈接的方式來(lái)傳參。

對(duì)于應(yīng)用型的后臺(tái)開發(fā),由于在提交數(shù)據(jù)時(shí)可能會(huì)有比較多的表單數(shù)據(jù)。這時(shí),這時(shí)結(jié)合DetailView或FormView,使用PostBack來(lái)提交數(shù)據(jù)又可以給我們帶來(lái)非常大的方便,這種情況下我們不禁用ViewState也沒(méi)有關(guān)系,ViewState并不會(huì)很大,而至于刷新的問(wèn)題,我們可以使用UpdatePanel來(lái)幫助解決。但是如果對(duì)于瀏覽數(shù)據(jù)仍然是要特別注意,特別是有GridView的頁(yè)面進(jìn)行PostBack數(shù)據(jù)查詢,分頁(yè)時(shí),盡量都能改成鏈接的方式來(lái)實(shí)現(xiàn)。

總體來(lái)說(shuō),PostBack的使用還是要特別注意,能少用就少用,但有時(shí)用它確實(shí)也會(huì)給我們帶來(lái)非常大的方便。對(duì)于應(yīng)用型的后臺(tái)開發(fā),如果使用EXT的話,那么就是可以完全摒棄WebForm,或MVC了。因?yàn)樗凶约阂徽淄暾拈_發(fā)流程,從目前來(lái)看,確實(shí)是一種全新的體驗(yàn)。

連續(xù)兩篇討論的PostBack和ViewState,可能結(jié)論都是偏向消極的。它們的存在有其重要意義的同時(shí),難免會(huì)帶來(lái)一些負(fù)面影響,但這種影響的代價(jià)在很多情況下過(guò)大而導(dǎo)致大多數(shù)人的反唇相譏。在軟件工程中,衡量軟件的標(biāo)準(zhǔn)不是越快越好,而是在用戶接受的合理的時(shí)間范疇內(nèi),得到正確的結(jié)果,并且它所花費(fèi)的代價(jià)(包括開發(fā),維護(hù),部署等成本)是最少的。我相信只要使用得當(dāng),它們還是可以充分發(fā)揮它們的作用的。

從極端的來(lái)說(shuō),去掉PostBack和ViewState后,WebForm仍然還是WebForm。它只是少了兩樣兩把利弊同樣明顯的雙刃劍,它余下的事件機(jī)制,組件化開發(fā),頁(yè)面模型仍然是我們進(jìn)行WebForm開發(fā)最有力的武器。

【編輯推薦】

  1. 微軟發(fā)布ASP.NET MVC 2預(yù)覽版 多項(xiàng)功能更新
  2. ASP.NET服務(wù)器自定義控件安全準(zhǔn)則
  3. ASP.NET編程規(guī)范之編碼規(guī)范淺析
  4. 關(guān)于ASP.NET Session的一點(diǎn)認(rèn)識(shí)
  5. ASP.NET編程工具ASP.NET Web Matrix詳細(xì)介紹
責(zé)任編輯:佚名 來(lái)源: IT專家網(wǎng)
相關(guān)推薦

2009-08-04 12:29:57

ViewState概念ASP.NET

2009-07-20 15:19:52

ViewState本質(zhì)ASP.NET

2009-08-04 17:00:09

ASP.NET禁用Vi

2009-07-28 13:39:44

加載ViewStateASP.NET

2009-07-28 16:42:02

ViewState技術(shù)ASP.NET應(yīng)用

2009-08-05 15:01:04

ASP.NET應(yīng)用Vi

2009-06-09 11:37:51

ViewStateViewDataASP.NET

2009-07-27 13:25:15

Postback程序處ASP.NET

2009-08-04 17:49:31

Web Page生命周ASP.NET Pos

2009-07-27 12:22:03

ASP.NET和ASPASP.NET入門教程

2009-07-29 16:08:07

ASP和ASP.NET

2009-08-04 10:51:09

Attributes和ASP.NET頁(yè)面

2009-08-05 18:14:52

ASP.NET 2.0

2009-07-27 14:46:16

XML和ASP.NET

2009-08-03 14:22:33

什么是ASP.NET

2009-07-28 17:17:19

ASP.NET概述

2009-07-21 15:47:19

2009-07-22 17:45:35

ASP.NET教程

2009-07-21 11:11:44

刪除CookieASP.NET

2009-07-24 10:10:22

ASP.NET
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)