日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Asp.net中服务端控件事件是如何触发的(笔记)

發(fā)布時間:2024/9/20 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Asp.net中服务端控件事件是如何触发的(笔记) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Asp.Net 中在客 戶端觸發(fā)服務器端事件分為兩種情況: 一.?? WebControls中的Button HtmlControls中的TypesubmitHtmlInputButton 這兩種按 鈕最終到客戶端的表現(xiàn)形式為:<input type="submit" value="Submit">,這是Form表單的 提交按鈕,點擊以后會作為參數(shù)發(fā)送到服務端,參數(shù)是這樣的: 控件的name屬性=控件的value值,對 應上面的例子就是:Submit1= Submit。服務器端會根據(jù)接收到的控件的name屬性的 這個key來得知是這個按鈕被點擊了,從而在服務端觸發(fā)這個按鈕的點擊事件。 二.?? HtmlControls 中的 TypebuttonHtmlInputButton 和其它所有的控件事件,比如LinkButton點擊,TextBoxChange事件等 等: 這些事件在客戶端產生后會經過一個統(tǒng)一的機制發(fā) 送到服務端。 1.首先asp.net頁框架 會使用兩個Hidden域來存放表示是哪個控件觸發(fā)的事件,以及事件的參數(shù): <!―表示觸發(fā) 事件的控件,一般是這個控件的name --> <input type="hidden" value="" /> <!―表示觸發(fā) 事件的參數(shù),一般是當某個控件有兩個以上的事件時,用來區(qū)別是哪個事件 --> <input type="hidden" value="" /> ? 2.服務端 會生成一個jscript的方法來處理所有這些事件的發(fā)送,這段代碼是: <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.每個會 引發(fā)服務端事件的控件都會在響應的客戶端事件中調用上面的代碼: 比如,HtmlControls 中的 TypebuttonHtmlInputButton的點擊 事件 <!―客戶端 的點擊事件調用__doPostBackeventTarget 參數(shù)為'Button2',表示是name'Button2’控件觸 發(fā)的事件,eventArgument 為空,表示這個TypebuttonHtmlInputButton只有一 個客戶端觸發(fā)的服務端事件--> <input language="javascript" Button2','')" type="button" value="Button" /> 又比如,TextBox控件的Change事件 <!―客戶端 的onchange事件調用__doPostBackeventTarget 參數(shù)為’TextBox1’,表示是name’TextBox1’控件觸 發(fā)的事件,而TextBox控件只有一個客戶端觸發(fā)的服務端事件TextChanged,故服 務器就會去觸發(fā)這個TextBoxTextChanged事件-> <input type="text" TextBox1','')" language="javascript" /> 4.客戶端 觸發(fā)事件后調用__doPostBack方法,將表示觸發(fā)的控件源的eventTarget 和事件參數(shù)eventArgument分別付給 兩個隱藏域__EVENTTARGET__EVENTARGUMENT,然后 提交Form,在服務端根據(jù)__EVENTTARGET__EVENTARGUMENT來判斷 是哪個控件的什么事件觸發(fā)了。 第二章?PostBack的原理 __doPostBack是一個純粹并且是非常簡單的javascript函數(shù),大部分的頁面PostBack都是由它觸發(fā)的。注意,這里是大部分,因為只有兩個Web Server Control??? 會自己觸發(fā)頁面的PostBack,其它的所有控件都是通過__doPostBack函數(shù)觸發(fā)頁面的PostBack,那先來看一下這個函數(shù)的定義吧: CODE1: <input type="hidden" value="" /> <input type="hidden" value="" /> function __doPostBack(eventTarget, eventArgument) { if (!theForm.onsubmit || (theForm.onsubmit() != false)) { theForm.__EVENTTARGET.value = eventTarget; theForm.__EVENTARGUMENT.value = eventArgument; theForm.submit(); } } 通過上面的代碼可以看到,__doPostBack帶有兩個參數(shù),eventTarget是標識將要引發(fā)頁面PostBack的控件IDeventArgument參數(shù)提供了在引發(fā)頁面PostBack事件時所帶的額外參數(shù)。當然這個函數(shù)被函數(shù)時,這兩個參數(shù)的 值將賦值給頁面的兩個隱含變量__EVENTTARGET__EVENTARGUMENT,然后調用頁面的submit方法提交頁面表單。這就是為什么我們可以通過Request.Form[“__EVENTTARGET”]獲取得到引發(fā)頁面PostBack的控件ID的原因。 了解了__doPostBack函數(shù)后,我們可以很容易的利用它非常方便地自己觸發(fā)自定義的PostBack事件。那上面也說了,大部分的控件都是調用 第三章 Button PostBack做法

下面來簡單看一下頁面PostBack的原理,和Button,ImageButton PostBack的特殊性。
__doPostBack 是一個純粹并且是非常簡單的javascript函數(shù),大部分的頁面PostBack都是由它觸發(fā)的。注意,這里是“大部分”,因為只有兩個Web Server Control 會自己觸發(fā)頁面的PostBack,其它的所以控件都是通過__doPostBack函數(shù)觸發(fā)頁面的PostBack,那先來看一下這個函數(shù)的定義吧:
[復 制此代碼]CODE:
<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();
}
}
通過上面的代碼可以看到,__doPostBack帶有兩個參數(shù),eventTarget是標識將要引發(fā)頁面 PostBack的控件ID,eventArgument參數(shù)提供了在引發(fā)頁面PostBack事件時所帶的額外參數(shù)。當然這個函數(shù)被函數(shù)時,這兩個參數(shù) 的值將賦值給頁面的兩個隱含變量__EVENTTARGET和__EVENTARGUMENT,然后調用頁面的submit方法提交頁面表單。這就是為什 么我們可以通過Request.Form[“__EVENTTARGET”]獲取得到引發(fā)頁面PostBack的控件ID的原因。
了解了 __doPostBack函數(shù)后,我們可以很容易的利用它非常方便地自己觸發(fā)自定義的PostBack事件。那上面也說了,大部分的控件都是調用這個方法 來引了頁面的PostBack,只有兩個控件是例外,Button 和 ImageButton,正是因為它們不是通過調用__doPostBack來回發(fā)事件,所以通過表單隱含變量__EVENTTARGET和 __EVENTARGUMENT是無法獲取得到引發(fā)PostBack的Button或ImageButton的ID和參數(shù)值的,只有通過下面的方式才能得 它們的實例,進而判斷是哪個控件引發(fā)的PostBack的: C#
[復制此代碼]CODE:
foreach (string str in Request.Form)
{
Control c = Page.FindControl(str);
if (c is Button)
{
control = c;
break;
}
}

為什么能通過枚舉Request.Form集合的Key值,查找到的回發(fā)事件源呢?在這里Button和ImageButton又有一些不同。 Button控件引發(fā)的PostBack,會將Button本身的ID作為Request.Form的一個Key,它的Value是Button的 Text屬性值,回傳給服務器,這樣服務器就可以通過枚舉Request.Form的Key值,去查找出控件實例,判斷是否為Button控件,進而得到 是哪個控件引發(fā)的PostBack事件。而ImageButton的不同就在于,它不僅僅是用ImageButton的ID作為Request.Form 的Key,它是用ImageButton的ID加上.x和.y,作為Key,在Request.Form添加兩上鍵值對,這兩個鍵值對的值應該是標識 ImageButton的圖片大小。同樣的,了解了這個規(guī)律后,我們仍然可以通過一定的方式得到是否是由ImageButton引發(fā)的PostBack。
總結:理解并掌握__doPostBack原理對我們更加了解Page的事件模型有非常大的幫助,并且也是我們進一步利用好頁面的 PostBack事件的一個重要基礎。在整個asp.net頁面PostBack模型中,只有Button和ImageButton是個例外,其它的控件 都是一樣的,也就是使用__doPostBack函數(shù)。在當我們需要通過__EVENTTARGET取得到事件源控件的話,這點是特別要注意的。


轉載于:https://www.cnblogs.com/yangtongnet/archive/2011/02/12/1952875.html

總結

以上是生活随笔為你收集整理的Asp.net中服务端控件事件是如何触发的(笔记)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。