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

ASP.NET源碼之自定義控件DateTimePicker

開發 后端
ASP.NET源碼之自定義控件DateTimePicker是什么情況呢?這篇文章將會向你介紹ASP.NET源碼之自定義控件DateTimePicker的具體情況。

ASP.NET源碼之自定義控件DateTimePicker的介紹:寫在前面:要實現DateTimePicker功能,最簡單的就是一個input,旁邊有一個日歷的小圖標,加入大量的javascript代碼,然后,點擊日歷后,就出現一個div用來選擇日期,選定之后,input就會出現剛才選定的日期。而input應該是只讀的。

ASP.NET源碼之自定義控件DateTimePicker效果圖

日期效果圖 

標記

Register Assembly="DateTimePickerControls" Namespace="DateTimePickerControls" TagPrefix="DTP"
這是寫在aspx頁上面的,用于引用dll的資源。

對應于源代碼中的命名空間的屬性定義

[assembly: TagPrefix("DateTimePickerControls", "DTP")]

加入工具箱

可以使用下面的方法將自定義的ASP.NET控件加入到工具箱中,如果引入DLL之后,工具箱還不出現控件,可以在工具箱右擊,選擇項,然后選擇DLL就一定可以。下面的ToolboxData表現控件的名稱,而Designer表示控件在設計界面(DesignMode)中的樣子,注意,必須存在DateTimePickerControls.DateTimePickerDesigner這個類才出現這句話。而DescriptionAttribute則是描述控件的作用。

  1. [  
  2.   ToolboxData("<{0}:DateTimePicker runat=server></{0}:DateTimePicker>"),  
  3.   ValidationPropertyAttribute("Text"),  
  4.   Designer(typeof(DateTimePickerControls.DateTimePickerDesigner)),  
  5.   DescriptionAttribute("一個基于 MSHTML 的 ASP.NET 時間選擇器。")  
  6.   ] 

控件DateTimePicker 

繼承

public class DateTimePicker: Control, IPostBackDataHandler, INamingContainer, IPostBackEventHandler

Control 是System.Web.UI空間下面的Control,表現Web控件的類,而IPostBackDataHandler是定義 ASP.NET 服務器控件為自動加載回發數據而必須實現的方法。也就是,使用_Control.Tex而不是Request.QueryString[“…”]. ToString()或Request.Form[“…”].ToString(),來獲取Html中的數據,主要的方法是LoadPostData, RaisePostDataChangedEvent,而INamingContainer和IPostBackEventHandler則暫時沒怎么使用。筆者只是參考其它Web控件而把這兩個接口加上去。

注冊腳本

注意到每一個Web自定義控件,都有其對應的Javascript或Vbscript腳本,而且,當頁面上有多個這樣的控件。不應用出現多個相同腳本。

所以,要使用Page.ClientScript.IsClientScriptBlockRegistered方法來注冊腳本。這樣的注冊腳本,相當于有一個Hashtable來保存腳本,而每一個注入的腳本都有一個Key來關聯。這樣的好處是,在使用多個腳本時,不會重復地寫在頁面上。

下面的代碼,使用到資源文件中寫好的腳本文件,換句話說,可以將腳本文件,如Javascript或Vbscript腳本先寫好,然后,直接復制到

  1. if (!Page.ClientScript.IsClientScriptBlockRegistered("DateTimePickerBaseScript"))  
  2. {  
  3.     ResourceManager manager = new ResourceManager(this.GetType());  
  4.     string script = manager.GetResourceSet(  
  5.         System.Globalization.CultureInfo.CurrentCulture, truetrue).GetString("DateTimePickerBaseScript");  
  6.     Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "DateTimePickerBaseScript", script);  

而.resx文件的源代碼,可以是這樣的:

  1. <root>  
  2. <!--其它的資源-->  
  3. <data name="DateTimePickerBaseScript">  
  4. <![CDATA[  
  5. Javascript或VbScript  
  6. ]]>  
  7. </data>  
  8. </root> 

在資源文件中寫腳本的優點是十分的明顯的,也就是.js的內容可以直接復制并粘貼到這里,而不用再經過處理。

ASP.NET源碼之自定義控件DateTimePicker重寫Control繼承而來的方法

protected override void OnPreRender(EventArgs e)

protected override void CreateChildControls()

可以將OnPreRender方法當成普通Page的OnLoad方法使用,而CreateChildControls方法用于新建子控件,也就是構造自定義控件的主要代碼。

獲取Text屬性

  1.    public bool LoadPostData(String postDataKey, NameValueCollection values)  
  2.    {  
  3. string PresentValue = this.ViewStateText;  
  4. string PostedValue = values[base.ID];  
  5. if (!PresentValue.Equals(PostedValue))  
  6. {  
  7.     this.Text = PostedValue;  
  8.     return true;  
  9. }  
  10. else 
  11. {  
  12.     return false;  
  13. }  
  14.    } 

上面是使用LoadPostData方法來獲取Text屬性的值。注意,這個方法有時候是不運行的,這是因為你的ChildControls中沒有一個ID =base.ID的控件,則,必須有一個子控件的ID為本控件的ID,這里講的子控件,不是指System.Web.UI空間下面的控件,而是指代那些可以在客戶端的瀏覽器中顯示的<input id=””>形式的控件,也就是使用string來表達的。正如

WriteTimePicker方法中寫到的"<input type=\"text\" id=\"" + DateTimePickerID。

獲取FormID

可以使用一個遍歷的過程,獲取項層控件的ClientID,因為在Js腳本中,服務器端的ID是用不了的。

設置DesignMode屬性類

也就是前面所提及的Designer(typeof (DateTimePickerControls.DateTimePickerDesigner)),相對來說,是比較簡單的,可以說,你可以參照一個正確的例子,然后隨便修改一下就可以。需要繼承System.Web.UI.Design.ControlDesigner類,重寫方法 Initialize,GetDesignTimeHtml。而GetDesignTimeHtml就是***顯示在設計界面上面的樣子。

顯示效果圖 

設計代碼如下:

  1. StringWriter sw = new StringWriter();  
  2.  
  3. HtmlTextWriter htw = new HtmlTextWriter(sw);  
  4. HtmlInputText inputText = new HtmlInputText();  
  5. inputText.Value = dtp.ID;  
  6. inputText.Style.Value = "Width:100px;border-style: none;background-color: #9EBEF5";             
  7. inputText.RenderControl(htw);  
  8. return sw.ToString(); 

綜上述得,要定義一個比較好的自定義控件,首先要有一個非控件形式的“功能點”使用方法,即上述的時間選擇功能,要JSP,ASP,ASP.NET中都可以使用的。然后,根據ASP.NET自定義控件的語法,一步步翻譯就沒什么問題了。

ASP.NET源碼之自定義控件DateTimePicker的情況就介紹到這里,希望對你了解ASP.NET源碼之自定義控件DateTimePicker有所幫助。

【編輯推薦】

  1. ASP.NET Request對象使用實例淺析
  2. ASP.NET(VB)應用之圖片增加水印文字淺析
  3. ASP.NET頁面框架概念淺析
  4. ASP.NET項目開發中健康監視淺析
  5. ASP.NET數據庫緩存淺析
責任編輯:仲衡 來源: cnblogs
相關推薦

2009-08-06 09:18:01

ASP.NET自定義控ASP.NET控件開發

2009-08-06 17:13:56

ASP.NET自定義控

2009-07-28 09:32:41

ASP.NET自定義控

2009-08-10 14:16:59

ASP.NET自定義控

2009-08-06 17:52:45

ASP.NET控件開發自定義控件

2011-04-19 10:33:16

ASP.NET自定義控

2009-08-07 11:12:58

ASP.NET控件開發

2009-08-01 12:00:15

ASP.NET服務器自ASP.NET服務器ASP.NET

2009-08-05 17:58:53

自定義集合ASP.NET 2.0

2009-08-10 16:58:45

ASP.NET安裝部署

2011-05-19 10:16:27

ASP.NET

2009-08-04 13:35:16

ASP.NET自定義樣

2011-09-08 13:56:41

ASP.NET性能

2009-08-01 09:21:12

ASP.NET服務器自ASP.NET服務器控ASP.NET

2009-08-06 15:21:45

ASP.NET控件開發RenderConte

2009-11-24 15:11:21

ASP.NET MVC

2009-08-12 14:38:05

ASP.NET Dat

2015-02-11 17:49:35

Android源碼自定義控件

2009-08-07 14:40:36

RegularExprASP.NET驗證控件

2009-07-22 15:27:39

ASP.NET MVC自定義路由
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本一区二区不卡视频 | 日本不卡免费新一二三区 | 亚洲一区免费在线 | 成人亚洲视频 | www.中文字幕.com | 久久高清免费视频 | 一区二区精品视频 | 成人精品鲁一区一区二区 | www.一区二区三区.com | 国产高清一区二区三区 | 日日夜夜天天 | 自拍偷拍第一页 | 午夜成人免费电影 | 天天艹天天干天天 | 久久99精品视频 | 国产黄色在线观看 | 男人天堂社区 | 狠狠草视频 | 精品二区视频 | 亚洲精品乱码久久久久久按摩观 | 福利视频三区 | 欧美一级久久久猛烈a大片 日韩av免费在线观看 | 久久久久国产一区二区三区四区 | 日本小电影网站 | www.99热这里只有精品 | 日韩中文字幕免费在线 | 欧美日韩1区 | 亚洲不卡一 | 影音先锋欧美资源 | 99精品免费久久久久久久久日本 | 中国人pornoxxx麻豆 | 在线视频亚洲 | 国产一区二区三区四区 | 蜜臀av日日欢夜夜爽一区 | 久久久久久国产精品免费免费男同 | 日本高清视频在线播放 | 日韩在线免费电影 | 91精品一区 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 国产一区亚洲 | 高清一区二区三区 |