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

ASP.NET組件設計代碼實現淺析

開發 后端
ASP.NET組件設計的實現是如何的呢?本文向你展示的是一個組件的設計全過程,希望對你了解ASP.NET組件設計有所幫助。

ASP.NET組件設計代碼實現是如何的呢?假設我們要設計一個組件,該組件只允許用戶輸入數字,該驗證工作自然應該放到客戶端,客戶端的驗證腳本可以這樣寫:

  1. ﹤HTML﹥  
  2.  
  3. ﹤HEAD﹥  
  4.  
  5. ﹤META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"﹥  
  6.  
  7. ﹤TITLE﹥﹤/TITLE﹥  
  8.  
  9. ﹤script language="javascript"﹥  
  10.  
  11. function Virty(ctrl)  
  12.  
  13. {  
  14.  
  15. if (event.keyCode == 13)  
  16.  
  17. return true  
  18.  
  19. if (event.keyCode ﹤ 48 || event.keyCode ﹥ 57)  
  20.  
  21. return false;  
  22.  
  23. else  
  24.  
  25. return true;  
  26.  
  27. }  
  28.  
  29. ﹤/script﹥  
  30.  
  31. ﹤/HEAD﹥  
  32.  
  33. ﹤BODY﹥  
  34.  
  35. ﹤form method="POST" ﹥  
  36.  
  37. ﹤p﹥  
  38.  
  39. ﹤input type="text" name="T1" size="20" OnKeyPress="javascript:return Virty(this);"﹥  
  40.  
  41. ﹤/p﹥  
  42.  
  43. ﹤/form﹥  
  44.  
  45. ﹤/BODY﹥  
  46.  
  47. ﹤/HTML﹥ 

ASP.NET組件設計的觀念是要想著用戶,因為,這些驗證代碼不能由用戶去寫,應該由組件設計者去寫,也就是說,當用戶把該組件從工具箱中拖到頁面上后,運行時應該自動生成驗證代碼。向WEB頁繪制代碼,我們重寫OnPreRender()方法就可以了。

在重寫OnPreRender()方法之前,先寫定義幾個常量:

  1. private const string SCP_NUMBER_ONLY_SCRIPT_ID="{29FD7A41-49FD-4fc4-AFA9-6A0B87***1A51}";  
  2.  
  3. private const string SCP_NUMBER_ONLY_HOOK="return Virty(this);";  
  4.  
  5. private const string SCP_NUMBER_ONLY_SCRIPT=  
  6.  
  7. "﹤script language=\"JavaScript1.2\"﹥\nfunction Virty (ctrl)\n{{\n"+  
  8.  
  9. "if (event.keyCode == 13)\n return true;\n if (event.keyCode ﹤ 48 || event.keyCode ﹥ 57)\n return false;\n else\n return true;\n}}"+  
  10.  
  11. "﹤/script﹥"

ASP.NET組件設計實現之驗證代碼的生成:

  1.  
  2. private void RenderJavaScript()  
  3.  
  4. {  
  5.  
  6. if(!Page.IsClientScriptBlockRegistered(SCP_NUMBER_ONLY_SCRIPT_ID)) 
  7. Page.RegisterClientScriptBlock(SCP_NUMBER_ONLY_SCRIPT_ID,string.Format(SCP_NUMBER_ONLY_SCRIPT,base.ID));  
  8.  

為什么會有Page.IsClientScriptBlockRegistered(SCP_NUMBER_ONLY_SCRIPT_ID)呢?我們想象一下,如果在WEB頁中有十個該控件,那是不是就要輸出十個這樣的腳本?顯然,這是畫蛇添足了,所以,我們要用IsClientScriptBlockRegistered()判斷該腳本是否在客戶端輸出,如果腳本在客戶端已注冊,則不再輸出了。

ASP.NET組件設計實現之重寫OnPreRender()方法了,該方法負責向客戶端繪制腳本。

  1. protected override void OnPreRender(EventArgs e)  
  2.  
  3. {  
  4.  
  5. base.OnPreRender (e);  
  6.  
  7. RenderJavaScript();  
  8.  

大家應該注意到,該腳本需要事件觸發才會執行,當用戶從瀏覽器輸入數據時,如果是非數字,則忽略該動作,否則才接受輸入。這就需要OnKeyPress="javascript:return Virty(this);"這段代碼了。那么,這段代碼怎么向客戶端輸出呢?重寫AddAttributesToRender()方法吧,該方法負責繪制組件的屬性。于是,我們寫了下面一段代碼:

  1. protected override void AddAttributesToRender(HtmlTextWriter writer)  
  2.  
  3. {  
  4.  
  5. base.AddAttributesToRender(writer);  
  6.  
  7.  
  8. writer.AddAttribute("OnKeyPress",SCP_NUMBER_ONLY_HOOK);  
  9.  

***的ASP.NET組件設計實現源碼如下:
 

  1. using System;  
  2.  
  3. using System.Text;  
  4.  
  5. using System.Drawing;  
  6.  
  7. using System.Web;  
  8.  
  9. using System.Web.UI;  
  10.  
  11. using System.Web.UI.WebControls;  
  12.  
  13. namespace PowerAsp.NET.Controls  
  14.  
  15. {  
  16.  
  17. [ToolboxBitmap(typeof(NumberEditor),"PowerAsp.NET.Controls.NumberEditor.bmp")]  
  18.  
  19. public class NumberEditor:BaseEditor  
  20.  
  21. {  
  22.  
  23. private const string SCP_NUMBER_ONLY_SCRIPT_ID="{29FD7A41-49FD-4fc4-AFA9-6A0B87***1A51}";  
  24.  
  25. private const string SCP_NUMBER_ONLY_HOOK="return NumberEditor_KeyPress_Handle(this);";  
  26.  
  27. private const string SCP_NUMBER_ONLY_SCRIPT=  
  28.  
  29. "﹤script language=\"JavaScript1.2\"﹥\nfunction NumberEditor_KeyPress_Handle(ctrl)\n{{\n"+  
  30.  
  31. "if (event.keyCode == 13)\n return true;\n 
  32. if (event.keyCode ﹤ 48 || event.keyCode ﹥ 57)\n return false;\n else\n return true;\n}}"+  
  33.  
  34. "﹤/script﹥";  
  35.  
  36. //rending number-limit javaScript.  
  37.  
  38. private void RenderJavaScript()  
  39.  
  40. {  
  41.  
  42. if(!Page.IsClientScriptBlockRegistered(SCP_NUMBER_ONLY_SCRIPT_ID)) 
  43. Page.RegisterClientScriptBlock(SCP_NUMBER_ONLY_SCRIPT_ID,string.Format(SCP_NUMBER_ONLY_SCRIPT,base.ID));  
  44.  
  45. }  
  46.  
  47. protected override void AddAttributesToRender(HtmlTextWriter writer)  
  48.  
  49. {  
  50.  
  51. base.AddAttributesToRender(writer);  
  52.  
  53. writer.AddAttribute("OnKeyPress",SCP_NUMBER_ONLY_HOOK);  
  54.  
  55. }  
  56.  
  57. protected override void OnPreRender(EventArgs e)  
  58.  
  59. {  
  60.  
  61. base.OnPreRender (e);  
  62.  
  63. RenderJavaScript();  
  64.  
  65. }  
  66.  
  67. public NumberEditor():base()  
  68.  
  69. {  
  70.  
  71. }  
  72.  
  73. }  
  74.  

ASP.NET組件設計的實現就向你介紹到這里,希望對你了解ASP.NET組件設計有所幫助。

【編輯推薦】

  1. ASP.NET配置錯誤頁面淺析
  2. ASP.NET錯誤頁面的制作淺析
  3. ASP.NET網站設置之文件夾權限設置淺析
  4. ASP.NET優點淺析
  5. ASP.NET組件設計淺析
責任編輯:仲衡 來源: 9host.cn
相關推薦

2009-08-05 16:53:14

ASP.NET組件設計

2009-08-10 13:32:15

ASP.NET TimASP.NET組件設計

2009-08-10 14:38:29

ASP.NET組件設計

2009-08-04 17:16:16

ASP.NET代碼優化

2009-08-10 16:07:44

ASP.NET Lin

2009-08-10 15:42:33

ASP.NET Che

2009-08-04 14:18:49

ASP.NET郵件列表

2009-08-07 17:49:44

控件設計器

2009-08-10 10:19:47

ASP.NET組件設計

2009-07-28 10:01:16

ASP.NET Exc

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優點

2009-08-07 16:32:52

ASP.NET控件設計時支

2009-08-07 17:59:35

控件設計器

2009-08-10 14:48:39

ASP.NET組件設計

2009-10-14 10:26:00

Route組件

2009-07-24 10:53:51

ASP.NET實現靜態

2009-08-04 10:02:36

中國站長站
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美不卡一区二区三区 | 欧美色偷拍 | 午夜影视免费片在线观看 | 日韩电影中文字幕 | 女生羞羞网站 | 国产农村妇女精品一区 | 一区二区三区不卡视频 | 黄网免费 | 成人av鲁丝片一区二区小说 | 天堂资源最新在线 | 性色在线 | 国产精品一级 | 亚洲成人av | 欧美精品一区二区三区在线 | 国产99久久久国产精品 | 91性高湖久久久久久久久_久久99 | 中文字幕在线一 | 精品国产91乱码一区二区三区 | 亚洲精品一区二区三区在线 | 成人一级视频在线观看 | 精品国产乱码久久久久久丨区2区 | 久久久夜| 综合久久av| 色视频www在线播放国产人成 | 国产 日韩 欧美 中文 在线播放 | 懂色av一区二区三区在线播放 | 午夜欧美 | 一级黄色短片 | 国产精品久久欧美久久一区 | 久久精品中文字幕 | 色在线免费 | 天天躁日日躁狠狠躁白人 | 91传媒在线播放 | 国产精品www| 涩涩视频在线看 | 国产区精品 | 国产午夜精品一区二区三区嫩草 | 不卡的av在线| 91夜色在线观看 | 蜜月va乱码一区二区三区 | 草草视频在线观看 |