欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入理解__doPostBack 客戶(hù)端調(diào)用服務(wù)端事件

 更新時(shí)間:2008年08月18日 08:56:19   作者:  
__doPostBack是一個(gè)純粹并且是非常簡(jiǎn)單的javascript函數(shù),大部分的頁(yè)面PostBack都是由它觸發(fā)的。
在我的隨筆《Page,你是怎樣處理回發(fā)事件的?》中曾提出一個(gè)疑問(wèn),如何得到引起頁(yè)面PostBack的控件?通過(guò)閱讀Page類(lèi)的源碼,誤打誤撞,無(wú)意中看到了__EVENTTARGET和__EVENTARGUMENT這兩個(gè)常量的定義,并通過(guò)調(diào)試分析頁(yè)面,知道了通過(guò)Request.Form[“__EVENTTARGET”]可以獲取到觸發(fā)頁(yè)面PostBack的事件源(控件的ID)。對(duì)于一般的控件,這樣就可以了,唯有Button和ImageButton觸發(fā)的PostBack無(wú)法通過(guò)這種方式獲取到它們的ID,起初還以為是它們實(shí)現(xiàn)的接口的不同而產(chǎn)生PostBack方式的不同。剛剛在AspAlliance.看到一篇關(guān)于__doPostBack的文章(原文:《Understanding the JavaScript __doPostBack Function》),才真正明白了頁(yè)面PostBack的內(nèi)在機(jī)制,疑團(tuán)也終于解開(kāi)了。下面來(lái)簡(jiǎn)單看一下頁(yè)面PostBack的原理,和Button,ImageButton PostBack的特殊性。

__doPostBack是一個(gè)純粹并且是非常簡(jiǎn)單的javascript函數(shù),大部分的頁(yè)面PostBack都是由它觸發(fā)的。注意,這里是“大部分”,因?yàn)橹挥袃蓚€(gè)Web Server Control 會(huì)自己觸發(fā)頁(yè)面的PostBack,其它的所以控件都是通過(guò)__doPostBack函數(shù)觸發(fā)頁(yè)面的PostBack,那先來(lái)看一下這個(gè)函數(shù)的定義吧:
復(fù)制代碼 代碼如下:

<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();
}
}
通過(guò)上面的代碼可以看到,__doPostBack帶有兩個(gè)參數(shù),eventTarget是標(biāo)識(shí)將要引發(fā)頁(yè)面PostBack的控件ID,eventArgument參數(shù)提供了在引發(fā)頁(yè)面PostBack事件時(shí)所帶的額外參數(shù)。當(dāng)然這個(gè)函數(shù)被函數(shù)時(shí),這兩個(gè)參數(shù)的值將賦值給頁(yè)面的兩個(gè)隱含變量__EVENTTARGET和__EVENTARGUMENT,然后調(diào)用頁(yè)面的submit方法提交頁(yè)面表單。這就是為什么我們可以通過(guò)Request.Form[“__EVENTTARGET”]獲取得到引發(fā)頁(yè)面PostBack的控件ID的原因。

了解了__doPostBack函數(shù)后,我們可以很容易的利用它非常方便地自己觸發(fā)自定義的PostBack事件。那上面也說(shuō)了,大部分的控件都是調(diào)用這個(gè)方法來(lái)引了頁(yè)面的PostBack,只有兩個(gè)控件是例外,Button 和 ImageButton,正是因?yàn)樗鼈儾皇峭ㄟ^(guò)調(diào)用__doPostBack來(lái)回發(fā)事件,所以通過(guò)表單隱含變量__EVENTTARGET和__EVENTARGUMENT是無(wú)法獲取得到引發(fā)PostBack的Button或ImageButton的ID和參數(shù)值的,只有通過(guò)下面的方式才能得它們的實(shí)例,進(jìn)而判斷是哪個(gè)控件引發(fā)的PostBack的: C#
復(fù)制代碼 代碼如下:

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

為什么能通過(guò)枚舉Request.Form集合的Key值,查找到的回發(fā)事件源呢?在這里Button和ImageButton又有一些不同。Button控件引發(fā)的PostBack,會(huì)將Button本身的ID作為Request.Form的一個(gè)Key,它的Value是Button的Text屬性值,回傳給服務(wù)器,這樣服務(wù)器就可以通過(guò)枚舉Request.Form的Key值,去查找出控件實(shí)例,判斷是否為Button控件,進(jìn)而得到是哪個(gè)控件引發(fā)的PostBack事件。而ImageButton的不同就在于,它不僅僅是用ImageButton的ID作為Request.Form的Key,它是用ImageButton的ID加上.x和.y,作為Key,在Request.Form添加兩上鍵值對(duì),這兩個(gè)鍵值對(duì)的值應(yīng)該是標(biāo)識(shí)ImageButton的圖片大小。同樣的,了解了這個(gè)規(guī)律后,我們?nèi)匀豢梢酝ㄟ^(guò)一定的方式得到是否是由ImageButton引發(fā)的PostBack。

總結(jié):理解并掌握__doPostBack原理對(duì)我們更加了解Page的事件模型有非常大的幫助,并且也是我們進(jìn)一步利用好頁(yè)面的PostBack事件的一個(gè)重要基礎(chǔ)。在整個(gè)asp.net頁(yè)面PostBack模型中,只有Button和ImageButton是個(gè)例外,其它的控件都是一樣的,也就是使用__doPostBack函數(shù)。在當(dāng)我們需要通過(guò)__EVENTTARGET取得到事件源控件的話,這點(diǎn)是特別要注意的。

注意: __doPostBack('','')前面是兩個(gè)“_”,不是一個(gè)。

相關(guān)文章

  • ASP.NET Core 3.0 gRPC攔截器的使用

    ASP.NET Core 3.0 gRPC攔截器的使用

    這篇文章主要介紹了ASP.NET Core 3.0 gRPC攔截器的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Visual Studio 2015全英界面切換成中文界面

    Visual Studio 2015全英界面切換成中文界面

    這篇文章主要為大家詳細(xì)介紹了Visual Studio 2015全英界面切換成中文界面的具體步驟,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • asp.net編程實(shí)現(xiàn)刪除文件夾及文件夾下文件的方法

    asp.net編程實(shí)現(xiàn)刪除文件夾及文件夾下文件的方法

    這篇文章主要介紹了asp.net編程實(shí)現(xiàn)刪除文件夾及文件夾下文件的方法,涉及asp.net針對(duì)文件與目錄的遍歷及刪除操作實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • 淺談.net core 注入中的三種模式:Singleton、Scoped 和 Transient

    淺談.net core 注入中的三種模式:Singleton、Scoped 和 Transient

    這篇文章主要介紹了淺談.net core 注入中的三種模式:Singleton、Scoped 和 Transient,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-04-04
  • 詳解.NET Core 3.0中的新變化

    詳解.NET Core 3.0中的新變化

    這篇文章主要介紹了詳解.NET Core 3.0中的新變化,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03
  • 如何創(chuàng)建一個(gè)AJAXControlToolKit的擴(kuò)展控件

    如何創(chuàng)建一個(gè)AJAXControlToolKit的擴(kuò)展控件

    相信熟悉Microsoft提供的AJAXControlToolKit的朋友已經(jīng)感覺(jué)到它的強(qiáng)大了。但是如果我們需要其它一些控件,或者是我們碰到一些很好的javascript然后需要把它們整合到ajaxcontroltoolkit中,如何來(lái)做。???
    2009-08-08
  • .NET?Core使用Autofac容器的DI依賴(lài)注入,IOC控制反轉(zhuǎn)及AOP切面編程

    .NET?Core使用Autofac容器的DI依賴(lài)注入,IOC控制反轉(zhuǎn)及AOP切面編程

    本文詳細(xì)講解了.NET?Core使用Autofac容器的DI依賴(lài)注入,IOC控制反轉(zhuǎn)及AOP切面編程,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • ASP.NET操作EXCEL的總結(jié)篇

    ASP.NET操作EXCEL的總結(jié)篇

    今年有個(gè)系統(tǒng)的部分EXCEL的操作也讓我做,順便結(jié)合之前操作EXCEL的經(jīng)驗(yàn)作一下總結(jié),可能也算不上什么,對(duì)于絕大多數(shù)來(lái)說(shuō)也沒(méi)什么技術(shù)含量,網(wǎng)上一搜一大把,但我想還是有必要總結(jié)一下
    2011-02-02
  • ASP.NET 通過(guò)攔截器記錄錯(cuò)誤日志的示例代碼

    ASP.NET 通過(guò)攔截器記錄錯(cuò)誤日志的示例代碼

    這篇文章主要介紹了ASP.NET 通過(guò)攔截器記錄錯(cuò)誤日志的示例代碼,幫助大家更好的理解和學(xué)習(xí)使用.NET技術(shù),感興趣的朋友可以了解下
    2021-04-04
  • asp.net實(shí)現(xiàn)輸出xml的方法

    asp.net實(shí)現(xiàn)輸出xml的方法

    這篇文章主要介紹了asp.net實(shí)現(xiàn)輸出xml的方法,涉及asp.net針對(duì)xml節(jié)點(diǎn)的查詢(xún)、創(chuàng)建、修改、生成等操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11

最新評(píng)論