成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ASP.NET組件設(shè)計之ASP.NET Timer淺析

開發(fā) 后端
ASP.NET組件設(shè)計之Web Timer向你介紹了在ASP.NET組件設(shè)計中的ASP.NET Timer的基本情況,希望對你有所幫助。

ASP.NET組件設(shè)計之ASP.NET Timer一、思考組件需求

在網(wǎng)頁上編寫一個Timer組件,首先得解決這個問題:如何讓網(wǎng)頁定時Post回Server端。 正常情況下這個動作是由用戶按下某個按鈕后觸發(fā)的,但Timer組件的需求是自動在特定時間觸發(fā),例如設(shè)計者設(shè)定在每5秒產(chǎn)生一個Post動作,網(wǎng)頁就得每5秒做出一個Post動作,這該如何完成呢?事實上,這可以通過Javascript提供的一個setTimeout函數(shù)來完成,只要運用此函數(shù)每5秒調(diào)用一次由ASP.NET產(chǎn)生的_doPostBack函數(shù)即可達到定時自動Post的需求,下面是setTimeout函數(shù)的原型。

  1. setTimeout(﹤function﹥,﹤interval﹥); 

***個參數(shù)是當(dāng)Timeout時間到時所調(diào)用的函數(shù),第二個是Timeout時間的長度,單位是毫秒(millisecond)。解決網(wǎng)頁定時自動Post的問題后,接著就是Server端如何接收這個信息的問題,答案就是Post-Back機制,只要實現(xiàn)此機制,組件就能在網(wǎng)頁自動Post后取得主控權(quán),并引發(fā)用戶所掛載的事件函數(shù)。

ASP.NET組件設(shè)計之ASP.NET  Timer二、實現(xiàn)Post-Back與繪制JavaScript

現(xiàn)在我們面臨兩個問題:***是組件的基類選擇。由于WebTimer屬于不可視組件,并不需要任何外觀睥屬性,所以自然是繼承自Control類;第二是WebTimer必須實現(xiàn)Post-Back接口,宋才能在網(wǎng)頁自動Post取得主控權(quán)后觸發(fā)用戶所掛載的事件函數(shù)。 下面是WebTimer處理Post-Back機制的部分程序代碼

  1. public class WebTimer:Control,IPostBackEventHandler  
  2. {  
  3.     …………  
  4.     IPostBackEventHandler implements#region IPostBackEventHandler implements  
  5.     void IPostBackEventHandler.RaisePostBackEvent(string eventArgument)  
  6.     {  
  7.         OnTimer(EventArgs.Empty);  
  8.     }  
  9.     #endregion  
  10.     …………  

由程序易知,WebTimer繼承自Control類,同時實現(xiàn)了IPostBackEventHandler接口。當(dāng)組件實現(xiàn)了該接口之后,Post-Back發(fā)生時Page對象會一一調(diào)用已注冊參與Post-Back運作組件的IPostBackEventHandler.RaisePostBackEvent函數(shù),此處WebTimer組件調(diào)用了OnTimer函數(shù)將控制權(quán)轉(zhuǎn)交給設(shè)計者所綁定的事件上,下面是OnTimer函數(shù)及事件處理部分的代碼:

  1. private static readonly object EventTimer = new object();  
  2.  
  3. …………  
  4. Events#region Events  
  5. public event EventHandler Timer  
  6. {  
  7.     add{Events.AddHandler(EventTimer,value);}  
  8.     remove{Events.RemoveHandler(EventTimer,value);}  
  9. }  
  10. #endregion  
  11.  
  12. event handler functions#region event handler functions   
  13. protected virtual void OnTimer(EventArgs e)  
  14. {  
  15.     EventHandler timerHandler = (EventHandler)Events[EventTimer];  
  16.     if(null != timerHandler)  
  17.     {  
  18.         timerHandler(this,e);  
  19.     }  
  20. }  
  21. #endregion 

接下來要做的就是繪制JavaScript函數(shù)。在這之前,還有一件很重要的事,那就是繪制默認的_doPostBack函數(shù)。默認情況下Page對象為了節(jié)省帶寬,并不是每次都繪制此函數(shù)。只有在某個組件明確調(diào)用Page.GetPostBackEventReference或Page.GetPostBackClientHyperlink其中的一個函數(shù)時,_doPostBack函數(shù)才會被繪制到網(wǎng)頁中。因此,WebTimer組件必須得調(diào)用Page.GetPostBackEventReference或是Page.GetPostBackClientHyperlink函數(shù),但是在哪里調(diào)用呢?Render函數(shù)?不行!此時Page對象已經(jīng)進入繪制狀態(tài),在此時調(diào)用Page對象的任何函數(shù)都已經(jīng)太遲了,所以***的地方是調(diào)用OnPreRender函數(shù),下面是相關(guān)代碼:

  1. protected override void OnPreRender(EventArgs e)  
  2. {  
  3.     base.OnPreRender(e);  
  4.     //call this method to ensure that the _doPostBack method will be called   
  5.     Page.ClientScript.GetPostBackEventReference(this,"");  

接下來就是編寫JavaScript函數(shù)并在Render函數(shù)中繪制相關(guān)動作:

  1. Utility functions#region Utility functions  
  2. private string BuildJavaScript()  
  3. {  
  4.     StringBuilder sb = new StringBuilder();  
  5.     sb.Append("\n﹤script language=\"javascript\"﹥\n ﹤!-- ");  
  6.     sb.AppendFormat("\n setTimeout(\"{0}\",{1});",  
  7.         new object[]{this.Page.GetPostBackEventReference(this),interval.ToString()});  
  8.     sb.Append("\n //--﹥\n﹤/script﹥");  
  9.     return sb.ToString();  
  10. }  
  11. #endregion  
  12.  
  13. protected override void Render(HtmlTextWriter writer)  
  14. {  
  15.     /**//*to ensure that this component is in the "runat=server" HtmlForm,  
  16.     or there'll be no Post-Back event,as a result that this component will be of no avail  
  17.     */ 
  18.     if(null != Page)  
  19.         Page.VerifyRenderingInServerForm(this);  
  20.     if(enabled)  
  21.         writer.Write(BuildJavaScript());  

除了Render函數(shù)之外,程序中尚用到兩個函數(shù):Page.VerifyRenderingInServerForm函數(shù)用來確認組件位于標(biāo)記為”runat=server”的HtmlForm控件中,假如組件并非位于此類的HtmlForm中,那么也就沒有Post-Back帶傷,WebTimer組件自然也就沒有作用了。另外一個是BuildJavaScript,此函數(shù)將之前所討論的JavaScript函數(shù)setTimeout配合用戶所設(shè)定的時間繪出。

有一點要指出來的是,在.net 2.0里面會有個警告提示System.Web.UI.Page.GetPostBackEventReference(System.Web.UI.Control)已過時,建議用ClientScript.GetPostBackEventReference來代替,新的函數(shù)重載了四次,但是沒有一個參數(shù)的,現(xiàn)在還不知道怎么改,有知道的希望能指出來!

ASP.NET組件設(shè)計之ASP.NET  Timer的基本情況就向你介紹到這里,希望對你學(xué)習(xí)有所幫助。

【編輯推薦】

  1. ASP.NET2.0數(shù)據(jù)源控件的用法淺析
  2. ASP.NET控件設(shè)計時支持之自動格式設(shè)置淺析
  3. ASP.NET控件設(shè)計時操作列表與模板編輯淺析
  4. ASP.NET控件設(shè)計器淺析
  5. ASP.NET組件設(shè)計淺談
責(zé)任編輯:仲衡 來源: cnblogs
相關(guān)推薦

2009-08-05 16:53:14

ASP.NET組件設(shè)計

2009-08-10 14:38:29

ASP.NET組件設(shè)計

2009-08-05 16:59:55

ASP.NET組件設(shè)計

2009-08-03 13:38:18

ASP.NET編程模型

2009-08-10 14:08:15

ASP.NET服務(wù)器控ASP.NET組件設(shè)計

2009-07-28 17:17:19

ASP.NET概述

2009-08-10 16:07:44

ASP.NET Lin

2009-08-10 15:42:33

ASP.NET Che

2009-08-05 18:36:12

ASP.NET Che

2009-07-24 13:41:15

ASP.NET AJA

2009-07-31 12:43:59

ASP.NET MVC

2009-08-05 15:50:13

ASP.NET優(yōu)點

2009-08-10 10:19:47

ASP.NET組件設(shè)計

2009-08-07 17:49:44

控件設(shè)計器

2009-12-02 09:07:45

ASP.NET 4.0

2009-07-29 09:34:54

IsPostBack屬ASP.NET

2009-08-04 17:16:16

ASP.NET代碼優(yōu)化

2009-08-05 16:17:29

ASP.NET For

2009-08-05 16:50:09

ASP.NET For

2009-07-24 18:02:46

ASP.NET編程
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 天天操 夜夜操 | 天堂视频中文在线 | 精品一区二区三区在线观看 | 国产色婷婷精品综合在线手机播放 | 午夜私人影院在线观看 | 国产精品99久久久久久动医院 | 在线播放中文 | 精品国产乱码久久久久久久久 | 日本中文字幕一区 | 日韩精品一区二区三区视频播放 | 亚洲欧美在线一区 | 一区二区国产在线观看 | 亚洲91av | 欧美不卡在线 | 一区精品国产欧美在线 | 亚洲一区二区视频 | 美女视频黄色的 | 日日日视频 | 国产精品成人在线观看 | 影视先锋av资源噜噜 | 国产亚洲欧美日韩精品一区二区三区 | 99热.com| 青青激情网 | 欧美一级www片免费观看 | 欧美一区二区在线观看 | 成人在线精品视频 | 日本在线中文 | 在线免费观看毛片 | 国产成人福利视频 | 日本三级电影免费观看 | 一级黄色夫妻生活 | 国产中文字幕在线 | 欧美视频1区 | 国产精品色av | 免费在线精品视频 | 国产精品久久久久久久久久免费看 | 最新伦理片 | 久久国产成人 | 美日韩精品 | 成人日韩av | 亚洲国产成人精品一区二区 |