Asp.net 中服務端控制項事件是如何觸發的

來源:互聯網
上載者:User

Asp.net 中在用戶端觸發服務端事件分為兩種情況:

一.     WebControls中的Button HtmlControls中的TypesubmitHtmlInputButton

這兩種按鈕最終到用戶端的表現形式為: <input name="Submit1" id="Submit1" type="submit" value=”Submit”>,這是Form表單的提交按鈕,點擊以後會作為參數發送到服務端,參數是這樣的: 控制項的name屬性=控制項的value值,對應上面的例子就是:Submit1= Submit。 服務端會根據接收到的控制項的name屬性的這個key來得知是這個按鈕被點擊了,從而在服務端觸發這個按鈕的點擊事件。

二.     ImageButton或者HttpInputImage:

這些控制項到用戶端的表現類似這樣的: <input type=image id=img1>,點擊了這樣的控制項會直接提交表單,作用同提交按鈕。點擊了這樣的控制項傳到服務端的參數是這樣的:id.x=nn&id.y=nn,對應到上面的例子就是:img1.x=nn&img1.y=nn

三.     HtmlControls 中的 TypebuttonHtmlInputButton 和其它所有的控制項事件,比如LinkButton點擊,TextBoxChange事件等等:

這些事件在用戶端產生後會經過一個統一的機制發送到服務端。

1.       首先asp.net頁架構會使用兩個Hidden域來存放表示是哪個控制項觸發的事件,以及事件的參數:

<!—表示觸發事件的控制項,一般是這個控制項的name -->

<input type="hidden" name="__EVENTTARGET" value="" /> 

<!—表示觸發事件的參數,一般是當某個控制項有兩個以上的事件時,用來區別是哪個事件 -->

<input type="hidden" name="__EVENTARGUMENT" value="" />

2.       服務端會產生一個jscript的方法來處理所有這些事件的發送,這段代碼是:

<script language="javascript">

<!--

  function __doPostBack(eventTarget, eventArgument) {

         var theform = document.WebForm2;

         theform.__EVENTTARGET.value = eventTarget;

         theform.__EVENTARGUMENT.value = eventArgument;

         theform.submit();

  }

// -->

</script>

3.       每個會引發服務端事件的控制項都會在響應的用戶端事件中調用上面的代碼:

比如,HtmlControls 中的 Type為button的HtmlInputButton的點擊事件

<!—用戶端的點擊事件調用__doPostBack,eventTarget 參數為'Button2',表示是name為'Button2’控制項觸發的事件,eventArgument 為空白,表示這個Type為button的HtmlInputButton只有一個用戶端觸發的服務端事件-->

<input language="javascript" onclick="__doPostBack('Button2','')" name="Button2" id="Button2" type="button"  value="Button" />

 

又比如,TextBox控制項的Change事件

<!—用戶端的onchange事件調用__doPostBack,eventTarget 參數為’TextBox1’,表示是name為’TextBox1’控制項觸發的事件,而TextBox控制項只有一個用戶端觸發的服務端事件TextChanged,故伺服器就會去觸發這個TextBox的TextChanged事件->

<input name="TextBox1" type="text" id="TextBox1" onchange="__doPostBack('TextBox1','')" language="javascript" />

4.       用戶端觸發事件後調用__doPostBack方法,將表示觸發的控制項源的eventTarget 和事件參數eventArgument分別付給兩個隱藏欄位__EVENTTARGET和__EVENTARGUMENT,然後提交Form,在服務端根據__EVENTTARGET和__EVENTARGUMENT來判斷是哪個控制項的什麼事件觸發了。

相關文章

聯繫我們

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