ASP.NET WebForm Best Practice 之PostBack

來源:互聯網
上載者:User

關於PostBack,我曾經也寫過一篇部落格《深入理解 __doPostBack》。在這篇文章裡有對PostBack進行了一些研究,現在看來研究的還是不夠深入。不過從原理上來說,ASP.NET WebForm中的一般WEB控制項(為什麼是一般呢?因為如Button等少數控制項不是調用__doPostBack方法的)在向伺服器回傳請求時,調用的就是__doPostBack方法,通過表單提交的方式來向伺服器提交請求。而WebForm所提供的WEB事件模型也是以__doPostBack這個方法為基礎的,往伺服器傳送的兩個隱含變數(__EVENTTARGET,__EVENTARGUMENT)就是PostBack事件分發的根據。__EVENTTARGET儲存著向伺服器發出PostBack請求的控制項ID,ASP.NET根據這個ID就可以找到它所對象的伺服器端控制項的執行個體。__EVENTARGUMENT儲存的是當前PostBack的一些參數。除此之外,PostBack還需要什麼條件呢?

在前段時間關於WebForm和MVC的討論中,有人提到禁用了ViewState,也就無法使用了PostBack。這也給我提了一個醒,確實ViewState與PostBack有非常緊密的關係,在大多數情況下,如果控制項的狀態是動態維護的。比如說DropDownList的Items是通過下面的代碼添加的:

   1: protected void Page_Load(object sender, EventArgs e)
   2: {
   3:     if (!this.IsPostBack)
   4:     {
   5:         DropDownList1.Items.Add(new ListItem("1", "Value1"));
   6:         DropDownList1.Items.Add(new ListItem("2", "Value2"));
   7:     }
   8: }

而不是在HTML頁面上靜態添加(或是在OnInit事件之前添加,不能加IsPostBack的判斷),這時,如果禁用ViewState,那麼DropDownList的SelectedIndexChanged事件將不會被正常觸發,並且DropDownList的Item項將會被清空。所以從這個角度來說,如果要使用PostBack,那麼ViewState勢必不能被禁用。

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

1)頁面在PostBack後,重新整理頁面時會出現非常不好的使用者體驗。

2)搜尋引擎的不友好。

3)在編寫伺服器端代碼時要特別的小心,特別是對IsPostBack的判斷。

儘管PostBack在WebForm的事件機制佔有舉足輕重的地位,它出現極大的方便了我們以事件驅動方式來開發WEB應用。從短期的入門應用中確實有它重要的意義。但從現實出發,還是必須得根據不同的應用場合有先擇性的使用。在網站前台型應用中,應該消滅一切可以消滅的PostBack。因為做為前台,它的作用就是展示還有查詢。而如果對查詢,分頁等操作使用PostBack的話,一方面搜尋引擎的不友好,另一方面給大多數使用者帶來非常不好的使用者體驗,增加了整個頁面的請求時間。同時,它們所傳的參數又非常有限,這情況下就需要使用連結的方式來傳參。

對於應用型的後台開發,由於在提交資料時可能會有比較多的表單資料。這時,這時結合DetailView或FormView,使用PostBack來提交資料又可以給我們帶來非常大的方便,這種情況下我們不禁用ViewState也沒有關係,ViewState並不會很大,而至於重新整理的問題,我們可以使用UpdatePanel來協助解決。但是如果對於瀏覽資料仍然是要特別注意,特別是有GridView的頁面進行PostBack資料查詢,分頁時,盡量都能改成連結的方式來實現。

總體來說,PostBack的使用還是要特別注意,能少用就少用,但有時用它確實也會給我們帶來非常大的方便。對於應用型的後台開發,如果使用EXT的話,那麼就是可以完全摒棄WebForm,或MVC了。因為它有自己一整套完整的開發流程,從目前來看,確實是一種全新的體驗。

連續兩篇討論的PostBack和ViewState,可能結論都是偏向消極的。它們的存在有其重要意義的同時,難免會帶來一些負面影響,但這種影響的代價在很多情況下過大而導致大多數人的反唇相譏。在軟體工程中,衡量軟體的標準不是越快越好,而是在使用者接受的合理的時間範疇內,得到正確的結果,並且它所花費的代價(包括開發,維護,部署等成本)是最少的。我相信只要使用得當,它們還是可以充分發揮它們的作用的。

從極端的來說,去掉PostBack和ViewState後,WebForm仍然還是WebForm。它只是少了兩樣兩把利弊同樣明顯的雙刃劍,它餘下的事件機制,組件化開發,頁面模型仍然是我們進行WebForm開發最有力的武器。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.