日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
ASP.NET組件設計代碼實現(xiàn)淺析

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

成都創(chuàng)新互聯(lián)公司專注于企業(yè)成都全網(wǎng)營銷推廣、網(wǎng)站重做改版、房山網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、H5網(wǎng)站設計、商城系統(tǒng)網(wǎng)站開發(fā)、集團公司官網(wǎng)建設、外貿(mào)營銷網(wǎng)站建設、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為房山等各大城市提供網(wǎng)站開發(fā)制作服務。

 
 
 
  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組件設計實現(xiàn)之驗證代碼的生成:

 
 
 
  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組件設計實現(xiàn)之重寫OnPreRender()方法了,該方法負責向客戶端繪制腳本。

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

大家應該注意到,該腳本需要事件觸發(fā)才會執(zhí)行,當用戶從瀏覽器輸入數(shù)據(jù)時,如果是非數(shù)字,則忽略該動作,否則才接受輸入。這就需要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組件設計實現(xiàn)源碼如下:

 
 
 
  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組件設計的實現(xiàn)就向你介紹到這里,希望對你了解ASP.NET組件設計有所幫助。

【編輯推薦】

  1. ASP.NET配置錯誤頁面淺析
  2. ASP.NET錯誤頁面的制作淺析
  3. ASP.NET網(wǎng)站設置之文件夾權限設置淺析
  4. ASP.NET優(yōu)點淺析
  5. ASP.NET組件設計淺析

當前標題:ASP.NET組件設計代碼實現(xiàn)淺析
分享路徑:http://www.5511xx.com/article/dpgpscc.html