在ASP.NET網頁中,常會使用IsPostBack來判斷網頁是否回應用戶端回傳而被載入,或者是否為第一次被載入與存取;另外,我們也常會在一些控制項使用AutoPostBack的功能,當你使用這些功能時,會不會很好奇,它們是怎麼運作的。
我們先在default.aspx接一個DropDownList控制項,然後啟用AutoPostBack。然後開啟網頁,查看原始碼:
1 | < select name = "DropDownList1" onchange = "javascript:setTimeout('__doPostBack(\'DropDownList1\',\'\')', 0)" id = "DropDownList1" > |
2 | < option value = "1" >1</ option > |
3 | < option value = "2" >2</ option > |
在select中被加入一段onchange事件,所有當你有選擇的動作時,會自動觸發javascript,我們來看網頁中被加入的javascript:
01 | <script type= "text/javascript" > |
03 | var theForm = document.forms[ 'form1' ]; |
05 | theForm = document.form1; |
07 | function __doPostBack(eventTarget, eventArgument) { |
08 | if (!theForm.onsubmit || (theForm.onsubmit() != false )) { |
09 | theForm.__EVENTTARGET.value = eventTarget; |
10 | theForm.__EVENTARGUMENT.value = eventArgument; |
__doPostBack的目的,在產生一個事件。當我們在使用Web控制項時,控制項都可以有自己的事件,例Button的Click、CheckBox的CheckedChanged、DropDownList的SelectedIndexChanged…等。這些事都是使用者在網頁上做了某些事情時所產生的動作。可是我們並沒有在網頁上寫任何程式碼來補抓這些事件,因此事件就算產生,也不會被處理。但這些事件之所以能Submit到後端交由ASP.NET來處理,都是藉由ASP.NET產生Web From時加入的Javascript程式碼「__doPostBack函式」來產生。
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。