|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
听03很多师兄说主讲老师杭城方讲课很差就连旁听也没有去了)asp.net|服务器|控件|示例 在上一篇文章中,我们解说了有关完成考证控件的一些常识。那些内容将为开辟职员完成考证控件奠基必定基本。为了匡助读者更好的了解考证控件的完成办法,本文将起首先容罕见考证控件的完成步骤,然后,经由过程一个典范示例申明考证控件的完成办法。
1.考证控件完成步骤
在创立考证控件过程当中,必要完成服务器端考证和客户端考证等中心内容。上面枚举了考证控件的罕见完成步骤。
(1)考证控件类应由BaseValidator基类承继。如许可以使考证控件主动承继介入考证框架所必要的功效。比方,经由过程承继BaseValidator的ControlToValidate属性,完成考证控件与考证方针控件的联系关系。
(2)完成考证控件所独有的一些属性。开辟职员可依据使用需求,从便利有用的角度动身界说这些特有属性。
(3)重写AddAttributesToRender办法,将特有属性及相干内容增加到控件出现中。当完成客户端考证代码时大概必要援用相干出现内容。
(4)重写EvaluateIsValid办法,为考证控件增加服务器端考证逻辑。
(5)重写PreRender事务的事务处置办法OnPreRender,除挪用基类完成办法外,还要完成对客户端考证剧本文件的注册。
(6)编写与考证控件一同打包的客户端考证剧本文件,而且将其安排到准确的目次中。
经由过程以上的一个大概几个步骤,开辟职员就能够完成一个基础的考证控件。在完成过程当中,服务器端考证逻辑和客户端考证逻辑必需坚持分歧,不然,即便输出数据经由过程了客户端考证,也没法经由过程服务器端考证。上面将经由过程一个典范实例来进一步申明考证控件的完成办法,以加深读者的了解。
2、典范使用
本节将利用上文所先容的开辟考证控件的办法,创立一个名为TelNumValidator的考证控件。该控件用于考证用户输出的德律风号码是不是切合划定规矩。假如不切合划定规矩,那末静态提醒毛病信息。其效果如。
如所示,页面中次要包含了一个TextBox文本框和一个提交按钮。用户必需输出准确格局的德律风号码,才干够经由过程考证。中,因为没有输出准确的德律风号码,当单击提交按钮时,则没法完成提交页面。同时,页面还分红蓝两种色彩给出了提醒信息。下文具体解说了考证控件的完成历程。
起首,在完成TelNumValidator控件之前,必需进一步明白考证前提。
关于国际德律风号码,通常是两种形式:一种是区号为3位,德律风号码为8位,另外一种是区号为4位,德律风号码为7位。据此,可得出用于考证的正则表达式:“d{3}-d{8}|d{4}-d{7}”。不管是服务器端考证逻辑,仍是客户端考证逻辑,都必需服从以上考证前提。只要切合这两种形式的输出数据才干够经由过程考证。
上面列出了考证控件TelNumValidator的服务器端考证的源代码。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Text;
usingSystem.Web;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Text.RegularExpressions;
namespaceWebControlLibrary
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:TelNumValidatorrunat=server>
</{0}:TelNumValidator>")
]
publicclassTelNumValidator:BaseValidator
{
//界说公有变量,个中_clientFileUrl暗示JavaScript文件存储目次
//ValidationExpression暗示正则表达式
privatestring_clientFileUrl="ClientFiles/";
privateconststringValidationExpression=@"(d{3}-d{8}|d{4}-d{7})";
//界说属性ClientFileUrl,用于猎取或设置剧本绝对路径
[
Description("猎取或设置剧本绝对路径"),
DefaultValue("ClientFiles/"),
Category("Appearance")
]
publicstringClientFileUrl
{
get
{return_clientFileUrl;}
set
{_clientFileUrl=value;}
}
//重写AddAttributesToRender,为考证控件增加特别属性evaluationfunction和validationexp
protectedoverridevoidAddAttributesToRender(HtmlTextWriterwriter)
{
base.AddAttributesToRender(writer);
if(RenderUplevel)
{
writer.AddAttribute("evaluationfunction","TelNumValidatorEvaluateIsValid",false);
writer.AddAttribute("validationexp",ValidationExpression);
}
}
//重写EvaluateIsValid办法,界说服务器端考证逻辑
protectedoverrideboolEvaluateIsValid()
stringcontrolValue=GetControlValidationValue(ControlToValidate);
if(controlValue==null)
{
returntrue;
}
controlValue=controlValue.Trim();
try
{
Matchm=Regex.Match(controlValue,ValidationExpression);
return(m.Success&&(m.Index==0)&&(m.Length==controlValue.Length));
}
catch
{
returnfalse;
}
}
//重写OnPreRender办法,注册客户端剧本程序
protectedoverridevoidOnPreRender(EventArgse)
{
base.OnPreRender(e);
if(RenderUplevel)
{Page.ClientScript.RegisterClientScriptBlock(typeof(TelNumValidator),
"ClientValidator",GetClientFileUrl("ClientValidator.js"));
}
}
//完成帮助函数GetClientFileUrl,用于猎取JavaScript文件的完全路径
privatestringGetClientFileUrl(stringfileName)
{
stringtempClient=String.Format("<scriptlanguage="javascript"src="{0}"></script>",(ClientFileUrl+fileName));
returntempClient;
}
}
从以上代码可知,TelNumValidator控件的完成,是依照上文申明的考证控件完成步骤编写的。该类完成了以下主要逻辑:
(1)考证控件类TelNumValidator类从BaseValidator基类承继,因而,该类主动承继了通用考证控件应当具有的属性、办法和事务。
(2)界说用于猎取或设置剧本绝对路径的属性ClientFileUrl,默许值为“ClientFiles/”。经由过程该属性页面开辟者可自界说客户端考证剧本文件的目次,如许可增添控件的天真性。
(3)重写AddAttributesToRender办法,为控件增加特征evaluationfunction和validationexp。特征evaluationfunction对应的值是举行客户端考证的办法名。特征validationexp对应的值是用于考证的正则表达式,经由过程将其出现到客户端,那末客户端考证剧本便可利用该表达式。
(4)重写EvaluateIsValid办法,界说服务器端考证逻辑。(5)重写OnPreRender办法,注册客户端剧本文件ClientValidator.js。
<P> 读者大概已注重到该考证控件必要完成客户端考证,而客户端考证包括在ClientValidator.js文件中。默许情形下,该文件位于“ClientFiles”文件夹中。
上面列出客户端考证文件ClientValidator.js的源代码。
functionTelNumValidatorEvaluateIsValid(val)
{
varvalidationexp=val.validationexp;
varvalueToValidate=ValidateTrim(ValidateGetValue(val.controltovalidate));
varrx=newRegExp(validationexp);
varmatches=rx.exec(valueToValidate);
return(matches!=null&&valueToValidate==matches[0]);
}
/*猎取考证方针控件的输出数据*/
functionValidateGetValue(id)
{
varcontrol;
control=document.all[id];
if(typeof(control.value)=="string")
{
returncontrol.value;
}
if(typeof(control.tagName)=="undefined"&&typeof(control.length)=="number")
{
varj;
for(j=0;j<control.length;j++)
{
varinner=control[j];
if(typeof(inner.value)=="string"&&(inner.type!="radio"||inner.status==true))
{
returninner.value;
}
}
}
else
{
returnValidatorGetValueRecursive(control);
}
return"";
}
/*往除空格处置*/
functionValidateTrim(s)
{
varm=s.match(/^s*(S+(s+S+)*)s*$/);
return(m==null)?"":m[1];
}
由上代码可知,ClientValidatior.js文件中仅包含一个主办法TelNumValidatorEvaluateIsValid。该办法完成了与服务器端考证中,EvaluateIsValid办法不异的逻辑。同时,还包含两个帮助办法ValidateGetValue和ValidateTrim。前者用于猎取考证方针控件的输出数据,后者用于往除空格处置。
为了测试以后自界说考证控件,上面枚举了Default.aspx页面源代码。
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="_Default"%>
<%@RegisterTagPrefix="Sample"Assembly="WebControlLibrary"Namespace="WebControlLibrary"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title>完成一个考证控件</title>
</head>
<body>
<formid="form1"runat="server">
<divstyle="font-size:small;">
<asp:TextBoxID="textbox"runat="server"></asp:TextBox>
<asp:ButtonID="Button1"runat="server"Text="提交"></asp:Button>
<Sample:TelNumValidatorID="demo1"runat="server"Display="dynamic"ControlToValidate="textbox"Text="请输出无效的德律风号码"ErrorMessage="准确的格局为010-12345678大概0123-1234567"></Sample:TelNumValidator>
<br/><br/>
<asp:ValidationSummaryrunat="server"ForeColor="blue"DisplayMode="singleParagraph"HeaderText="毛病信息:"ID="ValidationSummary1"></asp:ValidationSummary>
</div>
</form>
</body>
</html>
在以上完成中,请读者重点存眷自界说考证控件的属性设置。该控件次要设置了以下几个主要属性。
(1)ControlToValidate属性,经由过程设置该属性,从而完成了考证控件TelNumValidator和考证方针控件TextBox之间的联系关系。
(2)Display属性,经由过程设置该属性可设置毛病信息显现体例。
(3)ErrorMessage,该属性用于猎取或设置考证失利时ValidationSummary控件中显现的毛病信息的文本。为此,在代码中还设置了一个对应的ValidationSummary控件。
(4)Text,该属性用于猎取或设置考证失利时考证控件中显现的文本。
必要注重的是以上4个属性都承继自BaseValidator基类。别的,假如使用程序部署必要,开辟职员还能够修正考证控件的ClientFileUrl属性。
3.小结
本文经由过程一个典范示例申明了考证控件的完成办法。信任读者已可以感应,假如完成高质量的考证控件,开辟职员必需把握多方面的常识,特别是JavaScript言语等。别的,本文所触及的JavaScript代码被包括在js文件中。开辟职员也能够将这些代码作为资本文件编译到考证控件的dll文件中。这类完成办法十分有益于控件的部署事情。有乐趣的读者能够试一试。听03很多师兄说主讲老师杭城方讲课很差就连旁听也没有去了) |
|