自验证TextBox控件(不是很完美)

效果图片




以下为代码
using  System;
using  System.Data;
using  System.Drawing;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.ComponentModel;
using  System.Reflection;
using  System.Text.RegularExpressions;

[assembly: System.Web.UI.WebResource(
" Fanfajin.MyWebControls.MyTextBox.ok.gif " " image/gif " )]
[assembly: System.Web.UI.WebResource(
" Fanfajin.MyWebControls.MyTextBox.error.gif " " image/gif " )]
[assembly: System.Web.UI.WebResource(
" Fanfajin.MyWebControls.MyTextBox.required.gif " " image/gif " )]
namespace  Fanfajin.MyWebControls
{

    
///   <summary>
    
///  自定义控件MyTextBox
    
///   </summary>     
    [ToolboxBitmap( typeof (TextBox)),
    DefaultProperty(
" Text " ),
    ToolboxData(
" <{0}:MyTextBox runat='server'></{0}:MyTextBox> " )]
    
public   class  MyTextBox : TextBox, IValidator
    {

        
#region  私有变量
        
private   bool  _valid  =   true ; // 验证结果

        
private   string  _errorMessage  =   " 验证失败 " ; // 错误提示信息
         private   string  _ErrorImgUrl  =   "" // 错误图片
         private   string  _okMessage  =   " 验证通过 " ;    // 验证通过提示信息
         private   string  _OkImgUrl  =   "" ;     // 验证通过图片
         private   string  _requiedMessage  =   " <font color=red><b>*</b></font> " ; // 必填提示信息
         private   string  _RequiredImgUrl  =   "" // 必填项图片地址
         private   string  _normalMessage  =   " 可选项 " ;

        
private   string  _minValue  =   string .Empty;
        
private   string  _maxValue  =   string .Empty;
        
private   string  _userFieldName  =   string .Empty;  // 验证域名称
         private  ValidationDataType _CheckType  =  ValidationDataType.String; // 验证数据类型
         private   string  _Regex  =   string .Empty; // 正则表达式
         private  RegexOptions _RegexOptions  =  RegexOptions.IgnoreCase;  // 匹配模式
         #endregion

        
#region  ViewState 保存视图的属性
        
///   <summary>
        
///  是否必填
        
///   </summary>
        [Category( " 扩展选项 " ),
        Description(
" 是否必填项 " )]
        
public   bool  Required
        {
            
get
            {
                
if  (ViewState[ " Required " ==   null )
                {
                    
return   true ;
                }
                
return  ( bool )ViewState[ " Required " ];
            }
            
set
            {
                ViewState[
" Required " =  value;
            }
        }

        
///   <summary>
        
///  是否验证过了(不管有没有通过,就是看看控件是不是还没开始验证)
        
///   </summary>
        [Description( " 是否验证过了(不管有没有通过,就是看看控件是不是还没开始验证) " )]
        [Browsable(
false )]
        
public   bool  IsChecked
        {
            
get
            {
                
if  (ViewState[ " IsChecked " ==   null )
                {
                    
return   false ;
                }
                
return  ( bool )ViewState[ " IsChecked " ];
            }
            
set
            {
                ViewState[
" IsChecked " =  value;
            }
        }
        
#endregion

        
#region  公开的属性成员

        
///   <summary>
        
///  验证类型
        
///   </summary>
        [Category( " 扩展选项 " )]
        [Description(
" 数据验证类型String,Currency,Date,Double,Integer " )]
        
public  ValidationDataType CheckType
        {
            
get  {  return  _CheckType; }
            
set  { _CheckType  =  value; }
        }


        
///   <summary>
        
///  最小值(字符串时 比较长度最小值)
        
///   </summary>
        [Category( " 扩展选项 " ),
        Description(
" 最小值(字符串时比较长度最大值) " )]
        
public   string  MinValue
        {
            
get  {  return  _minValue; }
            
set  { _minValue  =  value; }
        }

        
///   <summary>
        
///  最大值(字符串时 比较长度最大值)
        
///   </summary>
        [Category( " 扩展选项 " ),
        Description(
" 最大值(字符串时 比较长度最大值) " )]
        
public   string  MaxValue
        {
            
get  {  return  _maxValue; }
            
set  { _maxValue  =  value; }
        }

        
///   <summary>
        
///  验证域名称
        
///   </summary>
        [Category( " 扩展选项 " ),
        Description(
" 验证域名称 " )]
        
public   string  UserFieldName
        {
            
get
            {
                
if  ( this ._userFieldName  ==  String.Empty)
                    
this ._userFieldName  =   this .ID.Replace( " txt " "" );
                
return   this ._userFieldName;
            }
            
set  {  this ._userFieldName  =  value; }
        }

        
///   <summary>
        
///  验证域正则表达式
        
///   </summary>
        [Category( " 扩展选项 " ),
        Description(
" 验证域正则表达式 " ),
        DefaultValue(
"" )]
        
public   string  RegexString
        {
            
get  {  return  _Regex; }
            
set  { _Regex  =  value; }
        }
        
///   <summary>
        
///  正则表达式匹配模式
        
///   </summary>
        [Category( " 扩展选项 " ),
        Description(
" 正则表达式验证模式 " )]
        
public  RegexOptions ReOption
        {
            
get  {  return  _RegexOptions; }
            
set  { _RegexOptions  =  value; }
        }
        
///   <summary>
        
///  验证成功提示信息
        
///   </summary>
        [Category( " 扩展选项 " ),
        Description(
" 验证成功提示信息 " )]
        
public   string  OkMessage
        {
            
get  {  return  _okMessage; }
            
set  { _okMessage  =  value; }
        }
        
///   <summary>
        
///  必填项提示信息
        
///   </summary>
        [Category( " 扩展选项 " ),
        Description(
" 必填项提示信息 " )]
        
public   string  RequiredMessage
        {
            
get  {  return  _requiedMessage; }
            
set  { _requiedMessage  =  value; }
        }
        
///   <summary>
        
///  正常提示信息
        
///   </summary>
        [Category( " 扩展选项 " ),
        Description(
" 正常提示信息 " )]
        
public   string  NormailMessage
        {
            
get  {  return  _normalMessage; }
            
set  { _normalMessage  =  value; }
        }
        
#endregion

        
#region  IValidator接口成员
        
///   <summary>
        
///  IValidator接口成员错误信息
        
///   </summary>
        [Category( " 扩展选项 " ),
        Description(
" 错误信息 " )]
        
public   string  ErrorMessage
        {
            
get  {  return  _errorMessage; }
            
set  { _errorMessage  =  value; }
        }

        
///   <summary>
        
///  IValidator接口成员
        
///   </summary>
        [Description( " IValidator接口成员 是否通过了验证 " )]
        [Browsable(
false )]
        
public   bool  IsValid
        {
            
get  {  return  _valid; }
            
set
            {
                _valid 
=  value;
                
if  ( ! _valid)
                {
                    
this .BackColor  =  Color.LightYellow;
                }
                
else
                {
                    
this .BackColor  =  Color.White;
                }
            }
        }
        
///   <summary>
        
///  IValidate接口成员
        
///   </summary>
         public   void  Validate()
        {
            
this .IsValid  =   true ;
            
this .IsChecked  =   true ;
            
// 如果是空的话,看看是否允许空值
             bool  isBlank  =  ( this .Text.Trim()  ==   "" );
            
if  (isBlank)
            {
                
if  (Required)
                {
                    
this .ErrorMessage  =  String.Format( " '{0}' 不能为空! " this .UserFieldName);
                    
this .IsValid  =   false ;
                }
                
else
                {
                    
this .IsValid  =   true ;
                    
return ;
                }
            }

            
//  验证类型是否正确
             bool  isOk  =  BaseCompareValidator.CanConvert( this .Text,  this ._CheckType);
            
if  ( ! isOk)
            {
                
// this.ErrorMessage = String.Format("'{0}' 请输入正确的类型" + this._CheckType.ToString(), this.UserFieldName);
                 this .ErrorMessage  +=   " [类型错误] " ;
                
this .IsValid  =   false ;
                
return ;
            }
            
//  验证最小值 MinValue与 Text对比
            isOk  =  TextBoxCompare.DoCompare( this .Text, MinValue, ValidationCompareOperator.GreaterThanEqual, _CheckType);
            
if  ( ! isOk)
            {
                
this .ErrorMessage  +=  String.Format( " 值或长度小于{0} " this .MinValue);
                
this .IsValid  =   false ;
                
return ;
            }
            
//  验证最大值 MaxValue与 Text对比
            isOk  =  TextBoxCompare.DoCompare( this .Text, MaxValue, ValidationCompareOperator.LessThanEqual, _CheckType);
            
if  ( ! isOk)
            {
                
// this.ErrorMessage = String.Format("'{0}' 的值不能超过 {1}", this.UserFieldName, this.MaxValue);
                 this .IsValid  =   false ;
                
return ;
            }
            
//  验证正则表达式
             if  ( this .RegexString  !=   "" )
            {
                isOk 
=  Regex.IsMatch( this .Text,  this .RegexString, ReOption);
                
if  ( ! isOk)
                {
                    
// this.ErrorMessage = String.Format("'{0}' 的格式不对!", this.UserFieldName);
                     this .IsValid  =   false ;
                    
return ;
                }
            }
        }

        
///   <summary>
        
///  文本框后的图片地址
        
///   </summary>
        [
        Category(
" 扩展选项 " ),
        Description(
" 验证失败时,文本框后面的图片URL地址 " )
        ]
        
public   string  ErrorImgUrl
        {
            
get
            {
                
if  (_ErrorImgUrl  ==   null   ||  _ErrorImgUrl  ==   "" )
                {
                    
return   this .Page.ClientScript.GetWebResourceUrl( this .GetType(),  " Fanfajin.MyWebControls.MyTextBox.error.gif " );
                }
                
else
                {
                    
return  _ErrorImgUrl;
                }
            }
            
set  { _ErrorImgUrl  =  value; }
        }

        
///   <summary>
        
///  文本框后的图片地址
        
///   </summary>
        [
        Category(
" 扩展选项 " ),
        Description(
" 验证成功时,文本框后面的图片URL地址 " )
        ]
        
public   string  OkImgUrl
        {
            
get
            {
                
if  (_OkImgUrl  ==   null   ||  _OkImgUrl  ==   "" )
                {
                    
// 返回默认的验证成功时的图片地址
                     return   this .Page.ClientScript.GetWebResourceUrl( this .GetType(),  " Fanfajin.MyWebControls.MyTextBox.ok.gif " );
                }
                
else
                {
                    
return  _OkImgUrl;
                }
            }
            
set  { _OkImgUrl  =  value; }
        }

        
///   <summary>
        
///  文本框后的图片地址
        
///   </summary>
        [
        Category(
" 扩展选项 " ),
        Description(
" 验证成功时,文本框后面的图片URL地址 " )
        ]
        
public   string  RequiredImgUrl
        {
            
get
            {
                
if  (_RequiredImgUrl  ==   null   ||  _RequiredImgUrl  ==   "" )
                {
                    
// 返回默认的验证成功时的图片地址
                     return   this .Page.ClientScript.GetWebResourceUrl( this .GetType(),  " Fanfajin.MyWebControls.MyTextBox.required.gif " );
                }
                
else
                {
                    
return  _RequiredImgUrl;
                }
            }
            
set  { _RequiredImgUrl  =  value; }
        }
        
#endregion

        
///   <summary>
        
///  OnInit
        
///   </summary>
        
///   <param name="e"></param>
         protected   override   void  OnInit(EventArgs e)
        {
            
base .OnInit(e);
            Page.Validators.Add(
this );
        }
        
///   <summary>
        
///  OnUnload
        
///   </summary>
        
///   <param name="e"></param>
         protected   override   void  OnUnload(EventArgs e)
        {
            
if  (Page  !=   null )
            {
                Page.Validators.Remove(
this );
            }
            
base .OnUnload(e);
        }
        
///   <summary>
        
///  加入错误提示信息
        
///   </summary>
        
///   <param name="writer"></param>
         protected   override   void  Render(HtmlTextWriter writer)
        {
            
base .Render(writer);
            
if  (IsChecked)
            {
                
if  ( this .IsValid)
                {
                    
if  (Required)
                    {
                        writer.Write(
"  <img src=\ ""  + this.OkImgUrl +  " \ " "   +   this .OkMessage);
                    }
                    
else
                    {
                        writer.Write(
"    "   +   this .NormailMessage);
                    }

                }
                
else
                {
                    
if  (Required)
                    {
                        writer.Write(
"  <img src=\ ""  + this.ErrorImgUrl +  " \ " "   +   this .RequiredMessage  +   " : "   +   this .ErrorMessage);
                    }
                    
else
                    {
                        writer.Write(
"  <img src=\ ""  + this.ErrorImgUrl +  " \ " "   +   " ( "   +   this .NormailMessage  +   " ) "   +   this .RequiredMessage  +   " : "   +   this .ErrorMessage);
                    }
                }
            }
            
else   // 还没开始验证
            {
                
if  (Required)
                {
                    writer.Write(
"  <img src=\ ""  + this.RequiredImgUrl +  " \ " "   +   this .RequiredMessage);
                }
                
else
                {
                    writer.Write(
"    "   +   this .NormailMessage  +   "   "   +   this .RequiredMessage);
                }
            }
        }

        
///   <summary>
        
///  验证类(从 BaseCompareValidator 派生 )
        
///   </summary>
         class  TextBoxCompare : BaseCompareValidator
        {
            
///   <summary>
            
///  执行验证
            
///   </summary>
            
///   <param name="from"></param>
            
///   <param name="to"></param>
            
///   <param name="cmp"></param>
            
///   <param name="objType"></param>
            
///   <returns></returns>
             public   static   bool  DoCompare( string  from,  string  to, ValidationCompareOperator cmp, ValidationDataType objType)
            {
                
if  (to  ==   null   ||  to.Length  ==   0 return   true ;
                
if  (objType  ==  ValidationDataType.String)
                {
                    
return  BaseCompareValidator.Compare(from.Length.ToString(), to.ToString(), cmp, ValidationDataType.Integer);
                }
                
return  BaseCompareValidator.Compare(from, to, cmp, objType);
            }

            
// 在派生类中重写时,此方法包含确定输入控件中的值是否有效的代码。
             protected   override   bool  EvaluateIsValid()
            {
                
return   true ;
            }


        }
    }

}

源码下载 http://files.cnblogs.com/fanfajin/MyTextBox2.rar

下载的源码中去掉了一些没什么用的东西了,可以在页面中加入一个ValidationSummary 验证控件来显示ErrorMessage,

转载于:https://www.cnblogs.com/fanfajin/archive/2007/08/29/875199.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值