ASP.NET组件设计代码实现浅析

ASP.NET组件设计代码实现是如何的呢?假设我们要设计一个组件,该组件只允许用户输入数字,该验证工作自然应该放到客户端,客户端的验证脚本可以这样写:

成都创新互联公司专注于企业成都全网营销推广、网站重做改版、房山网站定制设计、自适应品牌网站建设、H5网站设计商城系统网站开发、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为房山等各大城市提供网站开发制作服务。

 
 
 
  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组件设计浅析

文章名称:ASP.NET组件设计代码实现浅析
本文地址:http://www.mswzjz.cn/qtweb/news44/218694.html

攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能