ASP.NET AutoPostBack 属性
为理解AutoPostBack ,我们需要知道,什么是PostBack。
那么,什么是AutoPostBack , Autopostback是一种机制(自动根据Web控件的一些事件,将页面自动发回服务器。在一些Web控件中,称为auto post back属性。如果设置为true ,当此控件的某事件发生时,将发送一个request到服务器。
例如:
Dropdown Box (Combo box)控件的属性AutoPostBack。如果我们将其设置为true ,当用户在组合框中选择不同的值时,被触发的事件将发送一个request给服务器。
为什么我们需要发送请求到服务器?
在此情况下的网页一般是用来输入用户信息的。该网页包含两个组合框控件:国家和城市。当用户选择某国,适当的城市应该显示到另一组合框,当然这一般是从数据库加载。为实现这一要求,我们可以设置国家组合框的autopostback属性为true 。如果我们这样做,当国家组合框触发了事件,那么将有一request发送给服务器,而此时,可执行一次,我们预先写好的根据国家值从数据库读取适当的城市值。
转载:http://blog.csdn.net/hexianghong888/archive/2009/04/10/4061377.aspx
IsPostBack是Page类有一个bool类型的属性,用来判断针对当前Form的请求是第一次还是非第一次请求。当IsPostBack=true时表示非第一次请求,我们称为PostBack,当IsPostBack=false时表示第一次请求。在asp.net框架内部有很多的场景需要判断IsPostBack,比如LoadAllState等操作就需要在PostBack的时候进行。对于我们自己使用WebForm进行开发时,经常会在Page_Load中对IsPostBack进行判断,因为第一次请求的时候会执行Page_Load,在非第一次请求的时候也会执行Page_Load。为什么对同一个Form有多次请求呢?asp.net中引入了服务器端事件,支持服务器端事件的控件,会发出对当前Form的请求,这样在很多情形下我们就需要区别是否是对这个Form的第一次请求。
http://www.cnblogs.com/hobe/archive/2008/04/06/1139031.html
首先,引用别人的评论,我们简单理解一下PostBack与CallBack
#2楼[楼主] 回复 引用 查看
2006-04-24 22:06 by 心只有你
@ James Chen
看了你的解答我清楚了很多,是不是IsPostBack为true时,页面有任何变化都需要重新生成,给人刷新的感觉。而IsCallBack为true时,感觉只是客户端脚本在运行,虽然页面有变化,但是没有刷新的感觉。不过写客户端脚本是真的是一件很繁人的事情!!!
你看过Atlas吗?那个框架提供了一大堆的控件来实现Ajax一样的感觉,是不是也用到了Page的IsCallBack?
#3楼 回复 引用 查看
2006-04-24 22:34 by James Chen
你说的不错。PostBack方式刷新整个页面,CallBack方式不刷新整个页面。但是CallBack不能等同于Ajax,据说两者的实现原理不同。CallBack只能传送string类型的参数,而Ajax使用的是httprequest+xml的机制。Atlas我没看过,但它是实实在在的.NET环境下的Ajax库。没看的原因一是因为苏鹏的Ajax Webcast里还没讲到它,二是没听到它是否正式release了,呵呵。
在《ASP.NET專題實務》介绍过:
以前介紹的AJAX功能(本書第十九章),幾乎不用寫程式就可以靠著 ScriptManager + UpdatePanel來完成。但是ASP.NET也有提供手寫版本的AJAX功能,那就是本章介紹的 CallBack(回呼)。
使用工具來開發AJAX固然快速,但因為初學者不知其所以然,常常誤用而導致奇怪的執行結果(程式會跑,但結果怪怪的,會出現意料之外的狀況)。本章的CallBack雖然動手寫程式比較累,但流程確定反而不容易出錯。非常適合想要進一步提昇自己功力的讀者,進行自我鍛鍊。
20-1 PostBack(回傳)與CallBack(回呼)的差別
Client CallBack是從ASP.NET 2.0版才開始出現的新產物,透過CallBack我們可以完成AJAX的非同步功能。有了前一章使用 UpdatePanel的經驗,現在我們將探討「理論」的部份。
CallBack在VS 2008裡面,GridView控制項的屬性就有一個「EnableSortingAndPagingCallBacks」,讓排序與分頁功能,可以使用CallBack。簡單的說,Client CallBack就是由Client端啟動(觸發)AJAX非同步更新的功能。那麼,以前介紹過的PostBack(回傳)與目前介紹的CallBack(回呼)差異在哪裡呢?我們從執行面來分析之:
PostBack運作流程:
網頁的Page事件,觸發PostBack提出POST要求(Request)1. Init2. Load State3. Process PostBack Data4.Load5. PostBack Events6.Save State7. PreRender8. Render9. Unload
最後跟一般網頁的要求(Request)一樣,Server會回傳一個回應(Response)給對方的瀏覽器。
圖CallBack_01 傳統PostBack的作法。
CallBack運作流程:
網頁的事件觸發CallBack給「Script Event Handler」來處理,然後Script Event Handler提出非同步的要求(Async Request)1. Init2. Load State3. Process PostBack Data4.Load5. CallBack Event6. Unload
最後把CallBack的結果(即CallBack Result)傳回去,對方(使用者的瀏覽器)就會收到Script CallBack了。
20-2 Client CallBack改進了什麼?
在 ASP.NET Web網頁的預設模型中,使用者會與網頁互動並且按下按鈕,或執行其他動作以產生回傳(PostBack)。然後就會重新建立網頁和控制項、在伺服器上執行網頁程式碼,然後將新的內容(全部的新網頁)送回瀏覽器呈現。這是傳統的PostBack流程,如下:
1. ClientServer(第一次)。,使用者執行某個ASP.NET程式(想瀏覽某個網頁)。
2. ServerClient。ASP.NET程式經過IIS翻譯之後,變成HTML網頁,傳給使用者的瀏覽器。(這階段,使用者要等待,因為大量資料傳輸中….)
3. ClientServer(互動階段)。使用者看到網頁之後,不管是輸入資料、或是按下按鈕(例如:GridView的編輯模式),資料將會再傳回Web Server,作其他互動。
4. ServerClient。處理完成後,「全部的」網頁畫面,又傳到使用者的瀏覽器上,「整個網頁」都作更新。(這階段,使用者要等待,因為大量資料傳輸中….)。
……如此週而復始,這些流程就是網頁與用戶的互動模式(不管ASP/JSP/PHP或ASP.NET,都是一樣的)。
圖CallBack_02 傳統PostBack的流程。任何要求都會導致Server重新傳回「整個畫面」的資料。
但這種PostBack的傳統方法,有兩大缺點:
第一、如果網頁中的Client端指令碼(如JavaScript)是維護某些狀態資訊 (例如:區域變數值),則Client端回傳網頁的動作,並且取得新的網頁內容,一定會摧毀原本的狀態資訊。
第二、網頁的回傳(PostBack)需要被Server處理,因此會產生降低Server的效能,使用者也必須等待一段時間,直到Server處理完成並把”全部”的資料傳回給Client端的瀏覽器(如同上述流程的第三與第四狀態)。
若要避免遺失Client端狀態、或是減輕Client端(即用戶端,使用者的瀏覽器)與Web Server之間來回往返的處理負載,您可以撰寫Client CallBack(用戶端回呼)的 ASP.NET網頁程式碼。在Client端 CallBack中,用戶端JavaScript的function函式會將網頁要求(Request)傳送至 ASP.NET Web網頁。此網頁會執行其一般生命週期的修改版本。網頁會進行初始化並且建立其控制項與其他成員,然後呼叫特殊標記的方法。這種方法會開始處理編碼,然後將其他用戶端JavaScript的Function函式能夠讀取的值,傳回瀏覽器。(資料來源:微軟MSDN網站)
在Client CallBack的整個程序中,網頁會存在使用者的”瀏覽器”內,所以使用者完全不需要等待,反應速度快而且Web Server負擔也輕。相同的作業流程,Client CallBack在上圖的第三與第四階段省了很多時間,加速後的CallBack流程如下:
3. ClientServer(互動階段)。使用者看到網頁之後,不管是輸入資料、或是按下按鈕等等。只有使用者觸發的那一小部份,才會傳回Web Server作處理。
4. ServerClient。Server處理完成後,只把「需要更新」的那一小部份網頁,傳到Client端(使用者的瀏覽器)。這階段,Server只要處理並傳遞一小部份資料即可,所以Web Server負擔減輕,使用者的瀏覽速度也變快很多…。
转自:http://www.dotblogs.com.tw/mis2000lab/archive/2008/09/23/postback_callback.aspx