千家信息网

ASP.NET组件设计怎么实现

发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,这篇文章主要介绍"ASP.NET组件设计怎么实现",在日常操作中,相信很多人在ASP.NET组件设计怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"ASP.NET
千家信息网最后更新 2025年11月13日ASP.NET组件设计怎么实现

这篇文章主要介绍"ASP.NET组件设计怎么实现",在日常操作中,相信很多人在ASP.NET组件设计怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"ASP.NET组件设计怎么实现"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

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

﹤HTML﹥   ﹤HEAD﹥   ﹤META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"﹥   ﹤TITLE﹥﹤/TITLE﹥   ﹤script language="javascript"﹥   function Virty(ctrl)   {   if (event.keyCode == 13)   return true   if (event.keyCode ﹤ 48 || event.keyCode ﹥ 57)   return false;   else   return true;   }   ﹤/script﹥   ﹤/HEAD﹥   ﹤BODY﹥   ﹤form method="POST" ﹥   ﹤p﹥   ﹤input type="text" name="T1" size="20" OnKeyPress="_javascript:return Virty(this);"﹥   ﹤/p﹥   ﹤/form﹥   ﹤/BODY﹥   ﹤/HTML﹥

ASP.NET组件设计的观念是要想着用户,因为,这些验证代码不能由用户去写,应该由组件设计者去写,也就是说,当用户把该组件从工具箱中拖到页面上后,运行时应该自动生成验证代码。向WEB页绘制代码,我们重写OnPreRender()方法就可以了。

在重写OnPreRender()方法之前,先写定义几个常量:

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

ASP.NET组件设计实现之验证代码的生成:

 private void RenderJavaScript()   {   if(!Page.IsClientScriptBlockRegistered(SCP_NUMBER_ONLY_SCRIPT_ID)) Page.RegisterClientScriptBlock(SCP_NUMBER_ONLY_SCRIPT_ID,string.Format(SCP_NUMBER_ONLY_SCRIPT,base.ID));   }

为什么会有Page.IsClientScriptBlockRegistered(SCP_NUMBER_ONLY_SCRIPT_ID)呢?我们想象一下,如果在WEB页中有十个该控件,那是不是就要输出十个这样的脚本?显然,这是画蛇添足了,所以,我们要用IsClientScriptBlockRegistered()判断该脚本是否在客户端输出,如果脚本在客户端已注册,则不再输出了。

ASP.NET组件设计实现之重写OnPreRender()方法了,该方法负责向客户端绘制脚本。

protected override void OnPreRender(EventArgs e)   {   base.OnPreRender (e);   RenderJavaScript();   }

大家应该注意到,该脚本需要事件触发才会执行,当用户从浏览器输入数据时,如果是非数字,则忽略该动作,否则才接受输入。这就需要OnKeyPress="_javascript:return Virty(this);"这段代码了。那么,这段代码怎么向客户端输出呢?重写AddAttributesToRender()方法吧,该方法负责绘制组件的属性。于是,我们写了下面一段代码:

protected override void AddAttributesToRender(HtmlTextWriter writer)   {   base.AddAttributesToRender(writer);    writer.AddAttribute("OnKeyPress",SCP_NUMBER_ONLY_HOOK);   }

***的ASP.NET组件设计实现源码如下:

using System;   using System.Text;   using System.Drawing;   using System.Web;   using System.Web.UI;   using System.Web.UI.WebControls;   namespace PowerAsp.NET.Controls   {   [ToolboxBitmap(typeof(NumberEditor),"PowerAsp.NET.Controls.NumberEditor.bmp")]   public class NumberEditor:BaseEditor   {   private const string SCP_NUMBER_ONLY_SCRIPT_ID="{29FD7A41-49FD-4fc4-AFA9-6A0B87***1A51}";   private const string SCP_NUMBER_ONLY_HOOK="return NumberEditor_KeyPress_Handle(this);";   private const string SCP_NUMBER_ONLY_SCRIPT=   "﹤script language=\"JavaScript1.2\"﹥\nfunction NumberEditor_KeyPress_Handle(ctrl)\n{{\n"+   "if (event.keyCode == 13)\n return true;\n if (event.keyCode ﹤ 48 || event.keyCode ﹥ 57)\n return false;\n else\n return true;\n}}"+   "﹤/script﹥";   //rending number-limit javaScript.   private void RenderJavaScript()   {   if(!Page.IsClientScriptBlockRegistered(SCP_NUMBER_ONLY_SCRIPT_ID)) Page.RegisterClientScriptBlock(SCP_NUMBER_ONLY_SCRIPT_ID,string.Format(SCP_NUMBER_ONLY_SCRIPT,base.ID));   }   protected override void AddAttributesToRender(HtmlTextWriter writer)   {   base.AddAttributesToRender(writer);   writer.AddAttribute("OnKeyPress",SCP_NUMBER_ONLY_HOOK);   }   protected override void OnPreRender(EventArgs e)   {   base.OnPreRender (e);   RenderJavaScript();   }   public NumberEditor():base()   {   }   }   }

到此,关于"ASP.NET组件设计怎么实现"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

组件 设计 代码 方法 客户 脚本 客户端 用户 验证 学习 输出 输入 数字 更多 帮助 生成 实用 画蛇添足 接下来 也就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库查询向导创建不了 网络安全 高中英语作文 数据库单边集群挂了 imc保护网络安全的组件 保定软件开发简介 互联网科技平台还找汇承 法院行业网络安全行业报告 三国很嚣张是不是关服务器 税务网络安全责任追究制度 软件开发配置项管理制度 查找个数最多的数据库 软件开发技术报告ppt模板 主流的软件开发是什么平台 数据库语句及使用方法 高中学历怎么胜任软件开发 怎样检查是不是网络安全 石家庄rpa软件开发 上海系统软件开发定制费用 服务器和电脑显卡可以混用吗 把电脑主机变成服务器 服务器管理卡重启 上海信息网络技术推荐咨询 世界网络安全大赛2020直播 我的世界自制神奇宝贝服务器 excel批量算数据库 广播电视网络技术部个人总结 网络安全管理 领导小组 动态域名解析服务器 网络安全知识竞赛试卷百度 重视网络安全英语翻译
0