再認識asp.net的postback機制:探索__doPostBack的來龍去脈

來源:互聯網
上載者:User

__doPostBack作為在asp.net中一個很重要的部分,有必要深入瞭解一下__doPostBack的來龍去脈的.其實,__doPostBack是一個很簡單的JS function.代碼如下:

 

__doPostBack
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}

 

因為最終呈現給瀏覽器的內容都是html內容,採用asp.net技術也不能例外.要實現webcontrol的postback機制.只能在原來的submit上做文章.ms呈現給我們的,就是這種精巧的思維!

我看到,asp.net現在頁面上添加了兩個hidden input,這兩個input分別用來存放觸發postback的control的ID和參數.這就是我們大部分人認識到的:

__doPostBack(obj1,obj2)的第一個參數是控制項ID,第二個參數是postback的參數.然後就可以在後台用Request.Form["__EVENTTARGET"]和Request.Form["__EVENTARGUMENT"]取得控制項ID和參數.

很簡單就實現了看似很神奇,以為內部有什麼高深的處理的過程!如此輕巧的實現了asp.net的postback機制,佩服佩服!只要我們看懂了上邊的代碼,對__doPostBack的使用就應該不是什麼難事了.可以說__doPostBack就是這麼簡單的一回事.-_-||

不過,另外要注意的就是asp.net的webcontrols中,Button和ImgButton是異類,它們不是利用__doPostBack來實現postback的.為什麼這樣,可能因為Button在html中本來就是有觸發submit事件的功能吧.asp.net不過是要令原來html中一些不能觸發submit的東西submit,才弄出了__doPostBack來實現.對於原來就能submit的Button,又何必多此一舉呢.(僅個人理解,未經驗證!)

所以如果是Button的postback,在後台是不能用Request.Form["__EVENTTARGET"]和Request.Form["__EVENTARGUMENT"]取得控制項ID和參數的.那麼,怎麼取呢?看代碼:

 

取Button
foreach (string str in Request.Form)
{
Control c = Page.FindControl(str);
if (c is Button)
{
control = c;
break;
}
}

 

如上寫法可以在後台找到Button.為什麼這樣? 不知道,呵呵. 在Button的提交過程中,Button會將Button本身的ID作為Request.Form的一個Key,它的Value是Button的Text屬性值,回傳給伺服器.所以可以在後台迴圈Form.Keys取到所提交的Button,以執行相應的函數.ImgButton也差不多,不同就在於,它不是用ImageButton的ID作為Request.Form的Key,它是用ImageButton的ID加上.x和.y作為Key,在Request.Form添加兩上索引值對,這兩個索引值應該是對應ImageButton的圖片大小的,瞭解了這個規律後,我們仍然可以通過一定的方式得到是否是由ImageButton引發的PostBack.

瞭解Postback機制對我們理解asp.net的事件觸發過程有很大的協助,好好利用__doPostBack更能靈活的使用戶端和伺服器端進行互動,獲得更好的客戶體驗.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.