仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 547|回复: 7
打印 上一主题 下一主题

[学习教程] ASP.NET编程:创立具有自考证功效的textbox控件

[复制链接]
爱飞 该用户已被删除
跳转到指定楼层
#
发表于 2015-1-16 22:31:47 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
我实在想不明白java的机制,为什么非要那么蛋疼,在同一个平台下重复编译。创立|控件导言

在壮大的.NET眼前,我有良多的设法,我但愿asp.net的web控件内建有考证功效,而不必要在页面中拔出太多的考证控件乃至代码凌乱!如今我们将能够使用.NET来创立一个只同意输出整型数字的的textbox控件或只同意输出泉币型数据的textbox控件,等等。固然了,你还能够出格指定textbox控件能否为空大概是不是在一个局限内,等等,别的,当我们输出的数据切合请求时,还能够前往一个值,以便利我们以为是不是要干涉,乃至我们可让它运转的时分依据输出数据是不是切合请求出现分歧的色彩

经由一番勉力,我终究完成以上的设法

完成IValidator接口

我在研究SDK文档时发明,只需完成了IValidator接口,任何的控件都能够具有考证功效,以下是一个承继textbox控件的复杂的例子:
usingSystem;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI;
namespaceMyValidatingControls{
publicclassTextBox:System.Web.UI.WebControls.TextBox,IValidator{
privatebool_valid=true;
privatestring_errorMessage="";
publicboolIsValid{
get{return_valid;}
set{_valid=value;}
}
publicstringErrorMessage{
get{return_errorMessage;}
set{_errorMessage=value;}
}
publicvoidValidate(){
}
}
}
固然了,这段程序甚么都不做,可是它完整完成了基础的IValidator接口的架构(最少它是能够乐成编译的),我利用Private关头字创立两个字段(field)用来保留考证形态和毛病信息,为了确保考证控件能被实行,我们必需把我们的考证控件增加到页面中的考证控件汇合中来。

我在浏览SDK文档的时分发明,考证控件是在初始化时代加载他们自己的,IValidators接口次要用来注册他们本人,以是我们必要利用掩盖的办法从头完成OnInit和OnUnload事务,以便我们能从页面中的考证控件汇合中增加大概删除它们
protectedoverridevoidOnInit(EventArgse){
base.OnInit(e);
Page.Validators.Add(this);
}
protectedoverridevoidOnUnload(EventArgse){
if(Page!=null){
Page.Validators.Remove(this);
}
base.OnUnload(e);
}
完成设置
在我们完成我们的考证功效之前,为了使事务更简便,我设置了一些匡助项目,由于我不想独自分离独自供应考证控件的毛病信息,而是但愿把他们嵌进到控件中来,以完成我们所希冀格局的数据录进,因而,我必要做一些事变,使它能够得当的呈现毛病提醒。

我将增加一个叫做FriendlyName属性,它将在一切的毛病提醒信息中呈现以提醒用户正当的数据范例,以是,假如我们挪用的控件ID是RetailPrice,我们将使该控件的riendlyName为RetailPrice
privatestring_friendlyName="";
publicstringFriendlyName{
get{return_friendlyName;}
set{_friendlyName=value;}
}
最初,我们重写IsValid事务,使它能够在考证欠亨过期能够改动控件的背景色彩
publicboolIsValid{
get{return_valid;}
set{
_valid=value;
if(!_valid){
this.BackColor=Color.LightCoral;
}
else{
this.BackColor=Color.White;
}
}
}
不同意呈现空格
起首我们必要断定,供应一个可选项以决意是不是同意为空值,我们在这里必要创立一个属性以判别是不是能够为空

privatebool_blankAllowed=true;
publicboolAllowBlank{
get{return_blankAllowed;}
set{_blankAllowed=value;}
}
最初,我们能够重写考证函数

publicvirtualvoidValidate(){
this.IsValid=true;
if(!this.AllowBlank){
boolisBlank=(this.Text.Trim()=="");
if(isBlank){
this.ErrorMessage=
String.Format("{0}cannotbeblank.",
this.FriendlyName);
this.IsValid=false;
}
}
}
拓展我们的创意
如今我们已创立了一个内建基础考证功效的textbox控件,如今我们能够延展我们的设法,创立更多的风趣的具有特定考证功效的textbox控件

上面以创立一个只同意输出整型数据的textbox控件(IntegerTextBox),而且使该控件具有只同意输出的数据必需在必定的局限内,但我们仍旧必要思索是不是同意空值,以是,象下面一样,必要增加一个属性

在下面我们创立的基础的textbox控件的基本上,我们仅仅必要承继该控件,然后掩盖Validate函数和增加一些新的属性

privateint_minValue=Int32.MinValue;
privateint_maxValue=Int32.MaxValue;
publicintMinValue{
get{return_minValue;}
set{
_minValue=value;
if(_minValue>_maxValue){
intswap=_minValue;
_minValue=_maxValue;
_maxValue=swap;
}
}
}
publicintMaxValue{
get{return_maxValue;}
set{
_maxValue=value;
if(_minValue>_maxValue){
intswap=_minValue;
_minValue=_maxValue;
_maxValue=swap;
}
}
}
然后,我们扩大该Validate函数,并把编译它为当地代码

publicoverridevoidValidate(){
this.IsValid=true;
boolisBlank=(this.Text.Trim()=="");
if(isBlank){
if(!AllowBlank){
this.ErrorMessage=String.Format("{0}"+
"cannotbeblank.",this.FriendlyName);
this.IsValid=false;
}
}else{
try{
_value=Int32.Parse(this.Text);
if(_value<this.MinValue){
this.ErrorMessage=String.Format("{0}cannot"+
"belessthan{1}",
this.FriendlyName,this.MinValue);
this.IsValid=false;
}
if(_value>this.MaxValue){
this.ErrorMessage=String.Format("{0}"+
"cannotbemorethan{1}",
this.FriendlyName,this.MinValue);
this.IsValid=false;
}
}catch{
this.ErrorMessage=String.Format("{0}"+
"isnotavalidinteger.",this.FriendlyName);
this.IsValid=false;
}
}
}
publicintValue{
get{return_value;}
set{
_value=value;
this.Text=_value.ToString();
}
}
结论

要写就那末多了,如今我们还能够在这个类的基本上创立诸如请求只能输出切合必定工夫格局和泉币格局,上面我们举一个例子以申明怎样利用我们创立的控件

在此之前我们要完成一样的功效必要写以下的代码:

<asp:TextBoxid="Number"runat="server"/>
<asp:RequiredFieldValidatorid="RequiredFieldValidator2"
ControlToValidate="Number"
Text="Numbercannotbeblank."runat="server"/>
<asp:RangeValidatorid="Range1"ControlToValidate="Number"
MinimumValue="0"MaximumValue="100"
Type="Integer"Text="Thevaluemustbefrom0to100!"
runat="server"/>

而如今,我们仅仅需一句:
MyControls:IntegerTextid="Number"
FriendlyName="Number"MinValue="0"MaxValue="100"
AllowBlank="false"runat="server">

最初,必要申明的是,我创立的这个类绝对与现有的考证来讲其实不那末完善,一个分明必要改善中央是,我们必要在该类中增加客户端剧本,以使考证举动能够不但在服务器端触发,也能够在客户端触发

我但愿每个人都能了解它的运转道理,以便你有更好的创意的时分能够修改它,大概有一天我大概会利用你创立的具有完善功效的类集。
计算机发展到这个时候,很多技术日益成熟,想学好一种技术都是不容易的,当你学会用的时候你对它的很多原理可能很不了解)
金色的骷髅 该用户已被删除
7#
发表于 2015-3-22 05:39:52 | 只看该作者
同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。
admin 该用户已被删除
6#
发表于 2015-3-15 22:06:12 | 只看该作者
逐步缩小出错代码段的范围,最终确定错误代码的位置。
第二个灵魂 该用户已被删除
5#
发表于 2015-3-8 10:09:43 | 只看该作者
对于中小项目来说.net技术是完全可以胜任,但为什么现在大型公司或网站都选择php或java呢?就是因为微软不够开放,没有提供从硬件到应用服务器再到业务应用的整套解决方案。
活着的死人 该用户已被删除
地板
发表于 2015-2-25 23:15:22 | 只看该作者
比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变。
飘飘悠悠 该用户已被删除
板凳
发表于 2015-2-8 19:27:04 | 只看该作者
当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。
透明 该用户已被删除
沙发
发表于 2015-1-25 15:50:54 | 只看该作者
碰到复杂点的问题都不知道能不能解决,现在有点实力的公司都选择自已在开源的基础上做开发。但没听说过有人在IIS上做改进的,windows、sqlserver集群方面的应用也很少见。
只想知道 该用户已被删除
楼主
发表于 2015-1-19 16:10:46 | 只看该作者
微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 08:52

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表