天天看點

asp.net頁面回傳與js調用服務端事件,Postback的原理

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

一.   WebControls中的Button 和HtmlControls中的Type為submit的HtmlInputButton

這兩種按鈕最終到用戶端的表現形式為:<input type="submit" value="Submit">,這是Form表單的送出按鈕,點選以後會作為參數發送到服務端,參數是這樣的:

控件的name屬性=控件的value值,對應上面的例子就是:Submit1= Submit。伺服器端會根據接收到的控件的name屬性的這個key來得知是這個按鈕被點選了,進而在服務端觸發這個按鈕的點選事件。

二.   HtmlControls 中的 Type為button的HtmlInputButton 和其它所有的控件事件,比如LinkButton點選,TextBox的Change事件等等:

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

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

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

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

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

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

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

<script language="javascript" type="text/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" Button2','')" type="button" value="Button" />

又比如,TextB ......

<script type="text/javascript"><!-- google_ad_client = "pub-6770445892601887"; google_ad_slot = "4437639877"; google_ad_width = 468; google_ad_height = 60; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

繼續閱讀