自定义控件(js弹出框方式和自带验证控件)验证textbox

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ValidateTextBox
{


#region 枚举数据
<summary>
/// 验证数据类型
/// </summary>
public enum DataType
{
Never, //不验证
String, //字符串
Int, //整数
IntPostive, //大于0的整数
IntZeroPostive, //大于等于0的整数
Float, //数字
FloatPostive, //大于0的数字
FloatZeroPostive, //大于等于0的数字
Url, //链接
Mail, //邮箱
ChineseChars, //汉字
EnglishChars, //英文
EngNum, //英文和数字
EngNumUnerline, //英文、数字和下划线
PhoneNumber, //电话号码
MobileNumber, //手机号码
PostalCode, //邮政编码
Custom //自定义正则式
}
<summary>
/// 触发验证的事件,当为通过js方法alert弹出方式时使用
/// </summary>
public enum ActionType
{
onClick, //鼠标点击事件
onSubmit, //鼠标双击事件
onDblClick, //鼠标上的按钮被按下了
onMouseDown,//鼠标按下后,松开时激发的事件
onMouseUp, //鼠标按下后,松开时激发的事件
onMouseOver,//当鼠标移动到某对象范围的上方时触发的事件
onMouseMove,//鼠标移动时触发的事件
onMouseOut, //当鼠标离开某对象范围时触发的事件
onKeyPress, //键盘上的某个键被按下并且释放时触发的事件.[注意:页面内必须有被聚焦的对象]
onKeyDown, //当键盘上某个按键被按下时触发的事件[注意:页面内必须有被聚焦的对象]
onKeyUp, //当键盘上某个按键被按放开时触发的事件[注意:页面内必须有被聚焦的对象]
onBlur, //当前元素失去焦点时触发的事件
onChange, //当前元素失去焦点并且元素的内容发生改变而触发的事件 [鼠标与键盘的触发均可]
onFocus, //当某个元素获得焦点时触发的事件
onReset //当表单中RESET的属性被激发时触发的事件

}
public enum ValidType
{
JSAlert, //采用 js 进行验证
ServerValide //采用服务器验证控件进行验证
}
#endregion 枚举数据完毕
[DefaultProperty("Text")]
[ToolboxData("<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>")]
public class ValidateTextBox : System.Web.UI.WebControls.TextBox
{
private string error = "";

#region 属性定义

/// <summary>
/// 验证的方式时js验证还是服务器控件进行验证
/// </summary>
[Bindable(true)]
[Category("Data")]
[Browsable(true)]
[Description("在什么事件时触发验证")]
[DefaultValue("IntPostive")]
public ValidType validType
{
get { return ViewState["_validType"] == null ? "ServerValide" : ViewState["_validType"]; }
set { ViewState["_validType"] = value; }
}
/// <summary>
/// 验证的方式时js验证还是服务器控件进行验证
/// </summary>
[Bindable(true)]
[Category("Data")]
[Browsable(true)]
[Description("是否允许为空")]
[DefaultValue("IntPostive")]
public bool AllowEmpty
{
get { return ViewState["AllowEmpty"] == null ? true : (bool)ViewState["AllowEmpty"]; }
set { ViewState["AllowEmpty"] = value; }
}
/// <summary>
/// 触发验证的控件
/// </summary>
[Bindable(true),
Category("Data"), Description("触发验证的控件"),
DefaultValue("")]
public System.String ControlOfValidate
{
get { return ViewState["ControlOfValidate"] == null ? String.Empty : (string)ViewState["ControlOfValidate"]; }
set { ViewState["ControlOfValidate"] = value; }
}
/// <summary>
/// 错误信息提示的 CSS 类名
/// </summary>
[Bindable(true)]
[Browsable(true)]
[Category("自定义信息区")]
[Description("错误信息提示的 CSS 类名")]
[DefaultValue("")]
public string CssError
{
get { return ViewState["CssError"] == null ? "" : (string)ViewState["CssError"] ; }
set { ViewState["CssError"] = value; }
}
/// <summary>
/// 触发验证的控件的事件名称
/// </summary>
[Bindable(true)]
[Category("Data")]
[Browsable(true)]
[Description("在什么事件时触发验证")]
[DefaultValue("IntPostive")]
public ActionType actionType
{
get { return ViewState["actionType"] == null ? ActionType.onClick.ToString() : (String)ViewState["actionType"]; }
set { ViewState["actionType"] = value; }
}
/// <summary>
/// 为空时提示的错误信息
/// </summary>
[Bindable(true)]
[Category("Data")]
[Browsable(true)]
[Description("为空错误信息")]
[DefaultValue("IntPostive")]
public String NullErrorMsg
{
get { return ViewState["NullErrorMsg"] == null ? "输入不能为空" : (String)ViewState["NullErrorMsg"]; }
set { ViewState["NullErrorMsg"] = value; }
}
/// <summary>
/// 格式错误时的错误信息
/// </summary>
[Bindable(true)]
[Category("Data")]
[Browsable(true)]
[Description("为空错误信息")]
[DefaultValue("IntPostive")]
public String FormartErrorMsg
{
get { return ViewState["FormartErrorMsg"] == null ? "": (String)ViewState["FormartErrorMsg"]; }
set { ViewState["FormartErrorMsg"] = value; }
}
/// <summary>
/// 自定义正则式
/// </summary>
[Bindable(true)]
[Category("Data")]
[Browsable(true)]
[Description("自定义正则式")]
[DefaultValue("IntPostive")]
public String ValidExpressionCustom
{
get { return ViewState["ValidExpressionCustom"] == null ? "": (String)ViewState["ValidExpressionCustom"]; }
set { ViewState["ValidExpressionCustom"] = value; }
}
[Description("验证数据类型,默认为不验证")]
[DefaultValue("IntPostive")]
public DataType RessType
{
get { return ViewState["RessType"] == null ? DataType.Never : (DataType)ViewState["RessType"]; }
set { ViewState["RessType"] = value; }
}
#endregion 属性定义完毕

#region 构造函数,初始化子控件
/// <summary>
/// 初始化子控件
/// </summary>
private System.Web.UI.WebControls.RequiredFieldValidator rfvDataInput = new RequiredFieldValidator();
private System.Web.UI.WebControls.RegularExpressionValidator revDataInput = new RegularExpressionValidator();
private Panel pnlFrame = new Panel();

public ValidateTextBox()
{

}
#endregion 构造函数完毕


protected override void RenderContents(HtmlTextWriter output)
{

}

protected override void EnsureChildControls()
{
if (this.validType == ValidType.ServerValide)
{
this.rfvDataInput.CssClass = this.CssError;
this.rfvDataInput.ErrorMessage = "*输入不能为空";
this.rfvDataInput.Display = System.Web.UI.WebControls.ValidatorDisplay.Dynamic;
this.rfvDataInput.EnableViewState = true;
this.rfvDataInput.ControlToValidate = base.ID;

this.revDataInput.CssClass = this.CssError;
this.revDataInput.ErrorMessage = "*输入格式错误";
this.revDataInput.Display = System.Web.UI.WebControls.ValidatorDisplay.Dynamic;
this.revDataInput.EnableViewState = true;
this.revDataInput.ControlToValidate = base.ID;
//将子控件添加到此自定义控件中
this.Controls.Add(rfvDataInput);
this.Controls.Add(revDataInput);
this.Controls.Add(pnlFrame);
}
else
{
this.Controls.Add(pnlFrame);
this.getString();
}
}

#region 向页面写如控件

protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
writer.Write("&nbsp;");
if (this.validType == ValidType.ServerValide)
{
if (!this.AllowEmpty)
{
this.rfvDataInput.ID = "rfv" + base.ID;
this.rfvDataInput.ControlToValidate = base.ID;
this.rfvDataInput.RenderControl(writer);
}

if (this.RessType != DataType.Never && this.RessType != DataType.String)
{
this.revDataInput.ID = "rev" + base.ID;
this.revDataInput.ControlToValidate = base.ID;
this.revDataInput.ValidationExpression = this.GetValidRegex();
this.revDataInput.ErrorMessage = error;
this.revDataInput.RenderControl(writer);
}
}
else
{
System.Web.UI.ClientScriptManager client = this.Page.ClientScript;
Type cstype = Page.GetType();
client.RegisterStartupScript(cstype, base.ID + "_validate", getString());
this.pnlFrame.RenderControl(writer);

}

}
#endregion 向页面写入控件完
#region 得到正则式
private string GetValidRegex()
{
string regex = @"(/S)";
switch (this.RessType)
{
case DataType.Never :
break;
case DataType.Int :
error = "*必须为整数";
regex = @"(-)?(/d+)";
break;
case DataType.IntPostive :
error = "*必须为大于0的整数";
regex = @"([1-9]{1}/d*)";
break;
case DataType.IntZeroPostive :
error = "*必须为不小于0的整数";
regex = @"(/d+)";
break;
case DataType.Float :
error = "*必须为数字";
regex = @"(-)?(/d+)(((/.)(/d)+))?";
break;
case DataType.FloatPostive :
error = "*必须为大于0的数字";
regex = @"(/d+)(((/.)(/d)+))?";
break;
case DataType.FloatZeroPostive :
error = "*必须为不小于0的数字";
regex = @"(/d+)(((/.)(/d)+))?";
break;
case DataType.Url :
error = "*URL格式错误";
regex = @"(http://)?([/w-]+/.)+[/w-]+(/[/w- ./?%&=]*)?";
break;
case DataType.Mail :
error = "*EMail格式错误";
regex = @"/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*";
break;
// case DataType.ChineseChars :
// error = "*包含中文字符";
// regex = @"[^/x00-/xff]";
// break;
case DataType.EnglishChars :
error = "*只能输入英文字符";
regex = @"[a-zA-Z]*";
break;
case DataType.EngNum :
error = "*只能输入英文字符和数字";
regex = @"[a-zA-Z0-9]*";
break;
case DataType.EngNumUnerline :
error = "*只能输入英文字符、数字和下划线";
regex = @"[a-zA-Z0-9_]*";
break;
case DataType.PhoneNumber :
error = "*电话号码格式错误";
regex = @"(86)?(-)?(0/d{2,3})?(-)?(/d{7,8})(-)?(/d{1,5})?";
break;
case DataType.MobileNumber :
error = "*手机号码格式错误";
regex = @"(0)?(13)/d{9}";
break;
case DataType.PostalCode :
error = "*邮编格式错误";
regex = @"/d{6}";
break;
case DataType.Custom :
error = "*格式错误";
regex = this.ValidExpressionCustom;
break;
default:
break;
}
if(this.FormartErrorMsg.Trim() != "")
error = this.FormartErrorMsg;
return regex;
}
#endregion
#region 当为js验证的时候向页面输出的脚本

private string getString()
{
string strScript = @"<script language='javascript'>
function
newElement()
{
if(!document.getElementById('newP')){
var newElem = document.createElement('input');
newElem.setAttribute('id','newP');//newElem.id = 'newP';
newElem.setAttribute('value','0');//newElem.id = 'newP';
newElem.setAttribute('type','hidden');//newElem.id = 'newP';
document.body.appendChild(newElem);
}

function " + base.ID + @"_check(){
if(if(document.getElementById('newP').value=='已显示'))
{
return false;
}
var obj=document.getElementById('" + base.ID + "_" + @"');
var strTemp=obj.value;
strTemp=strTemp.replace(/^(/s)*|(/s)*$/g,'');//去掉字符串两边的空格
if (strTemp.length<1)
{

alert('" + this.NullErrorMsg + @"');

document.getElementById('newP')='已显示';
return false;
}
}
window.attachEvent('onload'," + base.ID+@"_enter);
function()" + base.ID + @"_enter(){
newElement();
document.getElementById('";
strScript += this.ControlOfValidate + "').attachEvent('" + GetAction() +"'," + base.ID + @"_check);
}
</script> ";
return strScript;
}
#endregion 输出脚本完
#region 得到具体的事件
private string GetAction()
{

switch (this.actionType)
{
case ActionType.onBlur:
return "onBlur";
case ActionType.onChange:
return "onChange";

case ActionType.onClick :
return "onClick";
case ActionType.onDblClick :
return "onDblClick";
case ActionType.onFocus :
return "onFocus";
case ActionType.onKeyDown :
return "onKeyDown";
case ActionType.onKeyPress :
return "onKeyPress";
case ActionType.onKeyUp:
return "onKeyUp";
case ActionType.onMouseDown:
return "";
case ActionType.onMouseMove:
return "onMouseDown";
case ActionType.onMouseOut:
return "onMouseOut";
case ActionType.onMouseOver:
return "onMouseOver";
case ActionType.onMouseUp:
return "onMouseUp";
case ActionType.onReset:
return "onReset";
case ActionType.onSubmit:
return "onSubmit";
default:
return "onclick";
}

}
#endregion
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值