asp.net 自定义文本框
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.ComponentModel;
namespace WebApp.MyControl
{
/// <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
}
public class MyTextBox : System.Web.UI.WebControls.TextBox
{
private System.Web.UI.WebControls.RequiredFieldValidator rfvDataInput = new RequiredFieldValidator(); //验证类的实例
private System.Web.UI.WebControls.RegularExpressionValidator revDataInput = new RegularExpressionValidator(); //验证表达式
private Panel pnlFrame = new Panel(); //承载其它控件的容器Panel控件
private string error = string.Empty;
public MyTextBox()
{
this.Height = 26;
this.Font.Size = 18;
}
[Bindable(true)]
[Category("自定义信息区")]
[Browsable(true)]
[Description("验证数据类型,默认为不验证")]
[DefaultValue("IntPostive")]
public DataType ValidType
{
get { return ViewState["ValidType"] == null ? DataType.Never : (DataType)ViewState["ValidType"]; }
set { ViewState["ValidType"] = value; }
}
[Bindable(true)]
[Category("自定义属性")]
[Browsable(true)]
[Description("是否允许空值")]
[DefaultValue("true")]
public bool AllowEmpty
{
get { return ViewState["AllowEmpty"] == null ? true : (bool)ViewState["AllowEmpty"]; }
set { ViewState["AllowEmpty"] = value; }
}
[Bindable(true)]
[Browsable(true)]
[Category("自定义属性")]
[Description("错误信息提示的CSS类名")]
[DefaultValue("")]
public string CssError
{
get { return ViewState["CssError"] == null ? "" : (string)ViewState["CssError"]; }
set { ViewState["CssError"] = value; }
}
[Bindable(true)]
[Browsable(true)]
[Category("自定义属性")]
[Description("自定义用于验证的正则表达式,ValidType 为 Custom 时有效")]
[DefaultValue("")]
public string ValidExpressionCustom
{
get { return ViewState["ValidExpressionCustom"] == null ? "" : (string)ViewState["ValidExpressionCustom"]; }
set { ViewState["ValidExpressionCustom"] = value; }
}
[Bindable(true)]
[Browsable(true)]
[Category("自定义属性")]
[Description("自定义验证错误信息")]
[DefaultValue("")]
public string ValidError
{
get { return ViewState["ValidError"] == null ? "" : (string)ViewState["ValidError"]; }
set { ViewState["ValidError"] = value; }
}
/// <summary>
/// 将子控件添加到此自定义控件中
/// </summary>
protected override void EnsureChildControls()
{
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);
}
/// <summary>
/// 将此控件呈现给指定的输出参数。
/// </summary>
/// <param name="output"> 要写出到的 HTML 编写器 </param>
protected override void Render(HtmlTextWriter output)
{
base.Render(output);
output.Write(" ");
if (!this.AllowEmpty)
{
this.rfvDataInput.ID = "rfv" + base.ID;
this.rfvDataInput.ControlToValidate = base.ID;
this.rfvDataInput.RenderControl(output);
}
if (this.ValidType != DataType.Never && this.ValidType != 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(output);
}
}
/// <summary>
/// 根据设置的验证数据类型返回不同的正则表达式样
/// </summary>
/// <returns></returns>
private string GetValidRegex()
{
string regex = @"(\S)";
switch (this.ValidType)
{
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:
//匹配中文字符的正则表达式: [\u4e00-\u9fa5]
//匹配双字节字符(包括汉字在内):[^\x00-\xff]
error = "*只能输入中文字符";
regex = @"[\u4e00-\u9fa5]";
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.ValidError.Trim() != "")
error = this.ValidError;
return regex;
}
}
}
asp.net 自定义文本框的更多相关文章
- Xamarin Android自定义文本框
xamarin android 自定义文本框简单的用法 关键点在于,监听EditText的内容变化,不同于java中文本内容变化去调用EditText.addTextChangedListener(m ...
- wxpython 支持python语法高亮的自定义文本框控件的代码
在研发闲暇时间,把开发过程中比较重要的一些代码做个珍藏,下面的代码内容是关于wxpython 支持python语法高亮的自定义文本框控件的代码,应该是对大家也有用. import keywordimp ...
- WPF 自定义文本框输入法 IME 跟随光标
本文告诉大家在 WPF 写一个自定义的文本框,如何实现让输入法跟随光标 本文非小白向,本文适合想开发自定义的文本框,从底层开始开发的文本库的伙伴.在开始之前,期望了解了文本库开发的基础知识 本文实现的 ...
- ASP.NET输入文本框自动提示功能
在ASP.NET Web开发中会经常用到自动提示功能,比如百度搜索.我们只要输入相应的关键字,就可以自动得到相似搜索关键字的提示,方便我们快速的输入关键字进行查询. 那么在ASP.NET中,如果我们需 ...
- JavaScript 自定义文本框光标——初级版
文本框(input或textarea)的光标无法修改样式(除了通过color修改光标颜色).但笔者希望个人创建自己的网站时,文本框的光标有属于自己的风格.所以,尝试模拟文本框的光标,设计有自己风格的光 ...
- android自定义文本框,后面带清空按钮
android常见的带清空按钮的文本框,获得焦点时如果有内容则显示,否则不显示 package com.qc.health.weight; import com.qc.health.R; import ...
- Asp.net中文本框全选的实现
一.鼠标滑过textbox全选 前台: <asp:TextBox runat="server" onMouseOver="this.focus();this.sel ...
- Winform 自定义文本框
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- jqgrid 自定义文本框、选择框等查询
要实现jqgrid的自定义查询可通过表格获取查询的条件,再给jqgrid表格发送postData参数. HTML: <table id="querytable" border ...
随机推荐
- Mac安装Appium
通过淘宝镜像安装 npm --registry http://registry.cnpmjs.org install -g appium 如果提示权限不够的话,需要加sudo,并输入对应密码 sudo ...
- HTTP请求方法对照表
根据HTTP标准,HTTP请求可以使用多种请求方法. HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法. HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELE ...
- win7下MariaDB10.0的my.ini配置文件的位置
msi版本的,安装后在安装目录下的\data\my.ini 常用的配置选项: 1.修改默认的存储引擎 在配置文件my.ini(linxu下为my.cnf) 中的 [mysqld] 下面加入defaul ...
- C/C++中产生随机数(rand,srand用法)
计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子.(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535 ...
- 关于iis站点无法读取 服务器共享目录的问题
也是权限问题,具体解决方法如下: 1. 找到该站点所在的应用程序池>>高级设置>>进程模型>>设置标志账号,如下图所示 2. 设置账号之后,找到该共享目录>& ...
- 剑指offer系列49--求1+2+...+N的和
[题目]求1+2+3+…+n, * 要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). package com.exe10.offer ...
- php正则替换所有空格和换行
替换所有空格为空 $contents=" abc "; $contents=preg_replace('/\s+/','',$contents); //结果$contents=&q ...
- Puppet Agent/Master HTTPS Communications
The agent/master HTTP interface is REST-like, but varies from strictly RESTful design in several way ...
- 学习C++11的一些思考和心得(1):lambda,function,bind和委托
1.lambda表达式 lanbda表达式简单地来讲就是一个匿名函数,就是没有名称的函数,如果以前有接触过python或者erlang的人都比较熟悉这个,这个可以很方便地和STL里面的算法配合 st ...
- .Net下实现可扩展的编程方法简述
IoC控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则用来解决系统耦合问题. 控制反转还有一个名字叫做依赖注入(DI:Dependency Inje ...