在.Net中创建自定义验证控件
简单记录一下:
自定义验证控件主要是继承自BaseValidator(该类实现了IValidator),我们只需要按照自己的规则实现EvaluateIsValid()方法即可。
如果要想在客户端验证的话,可以重写OnPreRender方法。
常用属性和方法介绍:
- ControlToValidate:要验证的控件的ID
- FindControl(string id):根据传递的Id获得控件(Control)
- GetControlValidationValue(string name):根据name获得控件的值value
- 别的属性可以自己在类里追加
相关的命名空间如下:
using System.Web.UI; using System.Web.UI.WebControls;
废话不多说,直接上代码:
public class ListValidator : BaseValidator
{
protected override bool ControlPropertiesValid()
{
Control ctrl = FindControl(ControlToValidate) as ListControl;
return (ctrl != null);
}
protected override bool EvaluateIsValid()
{
return this.CheckIfItemIsChecked();
}
protected bool CheckIfItemIsChecked()
{
ListControl listItemValidate = FindControl(ControlToValidate) as ListControl;
foreach (ListItem item in listItemValidate.Items)
{
if (item.Selected)
return true;
}
return false;
}
///client validate
///
protected override void OnPreRender(EventArgs e)
{
//this.RenderUplevel
if (this.DetermineRenderUplevel() && this.EnableClientScript)
{
Page.ClientScript.RegisterExpandoAttribute(this.ClientID, "evaluationfunction", "CheckIfListChecked");
this.CreateJavaScript();
}
base.OnPreRender(e);
}
/// <summary>
/// 生成客户端js验证code
/// </summary>
protected void CreateJavaScript()
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append(@"<script type=""text/javascript"">function CheckIfListChecked(ctrl){");
sb.Append(@"var chkBoxList = document.getElementById(document.getElementById(ctrl.id).controltovalidate);");
sb.Append(@"var chkBoxCount= chkBoxList.getElementsByTagName(""input"");");
sb.Append(@"for(var i=0;i<chkBoxCount.length;i++){");
sb.Append(@"if(chkBoxCount.item(i).checked){");
sb.Append(@"return true; }");
sb.Append(@"}return false; ");
sb.Append(@"}</script>");
if (!Page.ClientScript.IsClientScriptBlockRegistered("JSScript"))
{
Page.ClientScript.RegisterClientScriptBlock(GetType(), "JSScript", sb.ToString());
}
}
}
查看调用页的源代码之后,会发现自动生成了一些script片段,这些就是用来做验证的,代码不做解释,因为都是遵循ECMAScript Language Specification。
E文地址:文字简单,不翻译了
http://www.dotnetcurry.com/ShowArticle.aspx?ID=197
详细介绍:
http://www.cnblogs.com/joeliu/archive/2008/11/13/1240206.html

浙公网安备 33010602011771号