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

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

新聞中心

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

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

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

 
 
 
  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組件設(shè)計(jì)的觀念是要想著用戶,因?yàn)?,這些驗(yàn)證代碼不能由用戶去寫,應(yīng)該由組件設(shè)計(jì)者去寫,也就是說,當(dāng)用戶把該組件從工具箱中拖到頁面上后,運(yùn)行時(shí)應(yīng)該自動(dòng)生成驗(yàn)證代碼。向WEB頁繪制代碼,我們重寫OnPreRender()方法就可以了。

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

 
 
 
  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組件設(shè)計(jì)實(shí)現(xiàn)之驗(yà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.  

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

ASP.NET組件設(shè)計(jì)實(shí)現(xiàn)之重寫OnPreRender()方法了,該方法負(fù)責(zé)向客戶端繪制腳本。

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

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

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

【編輯推薦】

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

分享名稱:ASP.NET組件設(shè)計(jì)代碼實(shí)現(xiàn)淺析
分享地址:http://m.5511xx.com/article/dpgpscc.html