<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

      asp.net控件開發基礎(3)

      2006-08-02 21:03  Clingingboy  閱讀(34911)  評論(71)    收藏  舉報
            上一篇:http://www.rzrgm.cn/Clingingboy/archive/2006/08/01/465397.html
      上次講了在繼承Control類的時候為什么需要重寫Render方法

      本次來介紹控件的事件處理. 我們知道Button控件有OnClick事件,DropDownList控件有SelectedIndexChanged事件.

      一.回發事件和客戶端回發

      下面來看一個最簡單的例子

      按鈕單擊事件
      1 protected void Button1_Click(object sender, EventArgs e)
      2     {
      3         Label1.Text = "你好: "+TextBox1.Text;
      4     }

      大家知道Web 服務器控件創建的按鈕的類型有三種

      1.Button
      2.LinkButton
      3.ImageButton

      打開MSDN看到三個控件都繼承IPostBackEventHandler接口



      IPostBackEventHandler接口
      專門定義了處理回發事件的方法,說白了就是onclick事件,如果自定義控件需要處理回發事件,你就需要繼承IPostBackEventHandler接口,然后實現接口的RaisePostBackEvent 方法,另外一個簡單的方法就是直接繼承Button控件就可以了.

      RaisePostBackEvent方法用于處理窗體發送給服務器時引發的事件,方法中有一個參數eventArgument 表示要傳遞到事件處理程序的可選事件參數的 String

      下面總結處理回發事件,必須要做的步驟

      (1)繼承并
      實現IPostBackEventHandler接口的RaisePostBackEvent方法

      (2)為表單元素定義UniqueID,以與IPostBackEventHandler服務器控件的UniqueID相對應

      相應實現代碼如下

      示例一

      如果你不熟悉委托的話,可以參考一篇叫一個C#睡前故事的文章

      EventArgs.Empty表示沒有事件數據的事件,不要跟我以前一樣認為是一個空的事件,當時就很郁悶,干什么要觸發空事件呢,都是因為沒看清楚Empty字段的意思,以為就為空的意思了.

      EventArgs.Empty等同于EventArgs類的構造函數,等同于new EventArgs()
      注意還在呈現控件的name屬性加了UniqueID.
      好了,現在你可以測試下了.

      1protected void SuperButton1_1_Click(object sender, EventArgs e)
      2    {
      3        Label1.Text = "你點擊了此按鈕";
      4    }


      這樣你就成功定義了一個處理回發事件的控件. 假設你在頁面上多次使用這個控件,編譯器將為每個事件委托實例生成一個字段。如果事件的數目很大,則一個委托一個字段的存儲成本可能無法接受。.所以推薦采用另外一種優化的事件實現

      EventHandlerList 類提供一個簡單的委托列表來添加和刪除委托,下面來看看更改后的代碼,

      AddHandler有兩個參數事件對象和添加的委托,在OnClick事件中必須顯示將委托轉換為EventHandler類型

      示例二

      下面再來說下客戶端回發事件,在HTML窗體元素中只有Button按鈕和ImageButton才可以引起窗體回發.

      但如LinkButton鏈接按鈕控件要希望啟動回發的話,則要依賴客戶端腳本的事件機制來實現其功能.

      在asp.net2.0中,button控件多了一個UseSubmitBehavior 屬性,指示 Button 控件使用客戶端瀏覽器的提交機制(客戶端回發)還是 ASP.NET 回發機制,默認采用回發機制,如果設置為false的話,則需要調用GetPostBackEventReference 方法來返回 Button 的客戶端回發事件

      當設置UseSubmitBehavior 屬性為flase時,你運行頁面時,則會發現一段自動生成的javascript代碼

      LinkButton也一樣,再看下面例子,定義了枚舉,定義button按鈕和鏈接按鈕,大家在測試的時候,打開源代碼就會發現不同效果
      示例三


      如果大家本來就學過這方面的知識,看了心里還有譜,如果沒有的話,里面有些方法不熟悉的話,還是要多看看MSDN. 說通俗點,回發事件可以就理解為按鈕單擊事件,而按鈕又分兩種不同的回發事件方法,這樣講的話,更容易讓人接受,而上面所講的就是實現按鈕單擊事件實現的方法.

      二.數據回發事件

      好了,接著再講數據回發.跟上面講的事件回發有點不同.

      下面也舉一個簡單的例子,看下圖,有兩個DropDownList,一個開啟AutoPostBack,一個沒有開啟,再接著看下面簡單的代碼,第一個DropDownList,改變下拉框值時,label沒顯示,按確定按鈕后則顯示label,第二個DropDownList改變下拉框值時就顯示了label,因為開啟了AutoPostBack.這個大家都明白吧.



       protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
          
      {
              Label2.Text 
      = "你選擇了:  " + DropDownList1.SelectedItem.Text;
          }

          
      protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
          
      {
              Label1.Text 
      = "你選擇了:  " + DropDownList2.SelectedItem.Text;
          }


      以上實現的原理就是在SelectedIndexChanged事件里,判斷舊值和新值的比較(比較數據),如果發生變化,則引發事件,數據回發就是實現這樣的事件.再重新整理一下思路,明白何時會引發SelectedIndexChanged事件

      在選擇下拉框值時,如果選的值跟原來的值相同,則不觸發事件,如果選的值跟原來的值不同的話則觸發SelectedIndexChanged事件(還是舊值和新值的比較).

      打開MSDN文檔查看DropDownList 類,則發現其繼承了 IPostBackDataHandler 接口,我的意思就是說想要實現Change這樣的事件,就要繼承其接口.看看MSDN對此接口的定義

      IPostBackDataHandler 接口
      定義 ASP.NET 服務器控件為自動加載回發數據而必須實現的方法。

      LoadPostData 方法  根據服務器控件的狀態由于回發而發生更改做出判斷是否調用RaisePostDataChangedEvent 方法,返回true則調用(就是舊值和新值不同的時候)

      RaisePostDataChangedEvent 方法用于引發任何更改事件

      以下的例子實現了如同textbox的TextChanged事件

      postDataKey表示控件內部數據的關鍵值,postCollection表示所有傳入名稱值的集合,其采用索引的方式來訪問

       


      上面實現的方法如同button的onclick事件,其實不然,而是通過回發數據的新舊數據進行判斷,我在示例代碼中加了另外一個例子,這里就不列出了,大家可以下載后再去看,看了就明白不是button的onclick事件了.

      本次主要講了三個基礎的事件處理

      (1)捕獲回發事件
      (2)用于回調的客戶端腳本
      (3)處理回發數據

      以下兩個接口需要你慢慢的熟悉和使用

      IPostBackEventHandler接口和IPostBackDataHandler 接口.

      想到Button按鈕就要想到IPostBackEventHandler接口,想要textbox,dropdownlist一些change事件則要想要IPostBackDataHandler 接口,如果結合起來,再自己思考的話,會明白的更深刻.

      可能很多地方我也沒表達清楚,跟別人講的很多重復了,但還要拿出來分享下,這樣也可以提高自己.最后還望大家如果看到有什么錯誤,請指出.

      參考文章:

      ASP.NET2.0服務器控件開發之實現事件

      ASP.NET2.0服務器控件之捕獲回傳事件

      主站蜘蛛池模板: 亚洲图片自拍偷图区| 久久大香伊蕉在人线免费AV| 亚洲国产欧美在线看片一国产| 亚洲区色欧美另类图片| 久久天天躁夜夜躁狠狠躁2022 | 国产线播放免费人成视频播放| 日本一区二区不卡精品| 国产乱弄免费视频观看| 亚洲一区二区三区18禁| 都安| 久久精品一区二区三区综合| 亚洲人成色99999在线观看| 国产精品二区中文字幕| 蜜桃av无码免费看永久| 天天干天天色综合网| 亚洲日韩乱码中文无码蜜桃| 爆乳2把你榨干哦ova在线观看| 石原莉奈日韩一区二区三区| 久久毛片少妇高潮| 虎白女粉嫩尤物福利视频| 国产成人av一区二区三区不卡 | 自拍偷自拍亚洲精品播放| 无码人妻黑人中文字幕| 免费看的日韩精品黄色片| 久久精品国产蜜臀av| 国产美女高潮流白浆视频| 亚洲国产另类久久久精品| 中文日产幕无线码一区中文| 99在线精品视频观看免费| 在线欧美中文字幕农村电影| 午夜精品一区二区三区免费视频| 平定县| 99热门精品一区二区三区无码| 制服丝袜长腿无码专区第一页 | 亚洲熟妇少妇任你躁在线观看无码| 日韩精品亚洲专在线电影| 东辽县| 欧美人与动牲交精品| 久久综合偷拍视频五月天| 国语精品自产拍在线观看网站 | 永定县|