asp.net MaxLengthValidator 最大长度验证控件代码
2009-12-28 00:00
846 查看
/// <summary> /// TextBox的最大长度验证器,如果是varchar,char字段类型,需要此验证 /// </summary> [Description("对MaxLength进行验证")] [ToolboxData("<{0}:MaxLengthValidator runat=server></{0}:MaxLengthValidator>")] public class MaxLengthValidator : BaseValidator { /// <summary> /// 获取或设置是否为非nvarchar,nchar字段验证 /// </summary> [DefaultValue(true)] public bool ValidateForNonNationalField { get { var data = this.ViewState["ValidateForNonNationalField"]; if (data == null) { return true; } else { return (bool)data; } } set { this.ViewState["ValidateForNonNationalField"] = value; } } /// <summary> /// 构造函数 /// </summary> public MaxLengthValidator() { this.ValidateForNonNationalField = true; } protected override bool EvaluateIsValid() { var targetControlName = this.ControlToValidate; if (targetControlName == null) { //没有目标验证控件,验证通过 return true; } var targetControl = this.NamingContainer.FindControl(targetControlName) as TextBox; if (targetControl == null) { //目标控件不是文本框或不存在,验证通过 return true; } var maxLength = targetControl.MaxLength; var targetValue = this.GetControlValidationValue(targetControlName); var targetLength = 0; if (string.IsNullOrEmpty(targetValue)) { targetLength = 0; } else { if (this.ValidateForNonNationalField) { targetLength = this.GetLengthForNonNationnal(targetValue); } else { targetLength = targetValue.Length; } } return targetLength <= maxLength; } /// <summary> /// 获得保存为Varchar时,text的长度 /// </summary> /// <param name="text"></param> /// <returns></returns> public virtual int GetLengthForNonNationnal(string text) { if (string.IsNullOrEmpty(text)) { return 0; } var length = 0; for (var i = 0; i < text.ToCharArray().Length; i++) { var charCode = (int)text[i]; length++; if (charCode > 255) { length++; } } return length; } protected override void AddAttributesToRender(HtmlTextWriter writer) { base.AddAttributesToRender(writer); if (this.RenderUplevel) { writer.AddAttribute("TargetControlID", this.GetControlRenderID(this.ControlToValidate)); writer.AddAttribute("ValidateForNonNationalField", this.ValidateForNonNationalField ? "true" : "false"); writer.AddAttribute("evaluationfunction", "MaxLengthValidator_Validate"); var targetControl = this.NamingContainer.FindControl(this.ControlToValidate) as TextBox; if (targetControl != null) { var maxLength = targetControl.MaxLength; writer.AddAttribute("maxlength", maxLength.ToString()); } } } protected override void OnPreRender(EventArgs e) { var script = @" function MaxLengthValidator_GetNonNationalLength(text) { if (!text){ return 0; } var length = 0; for (var i = 0; i < text.length; i++) { var charCode = text.charCodeAt(i); length++; if (charCode > 255) { length++; } } return length; } function MaxLengthValidator_Validate(val) { if (!val) { return true; } var targetID = val.TargetControlID; if (!targetID) { return true; } var nonNational = val.ValidateForNonNationalField; if (!nonNational) { return true; } var target = document.getElementById(targetID); if (!target) { return true; } var maxLength = val.maxlength; if (!maxLength || isNaN(maxLength)) { return true; } var targetValue = target.value; if (!targetValue) { return true; } var realLength = targetValue.length; if (nonNational == 'true') { realLength = MaxLengthValidator_GetNonNationalLength(targetValue); } return realLength <= parseInt(maxLength); }"; ScriptManager.RegisterClientScriptBlock(this, typeof(MaxLengthValidator), "MaxLengthValidator_Validate", script, true); base.OnPreRender(e); } }
相关文章推荐
- 每日学习心得:CustomValidator验证控件验证用户输入的字符长度、Linq 多字段分组统计、ASP.NET后台弹出confirm对话框,然后点击确定,执行一段代码
- 每日学习心得:CustomValidator验证控件验证用户输入的字符长度、Linq 多字段分组统计、ASP.NET后台弹出confirm对话框,然后点击确定,执行一段代码
- 每日学习心得:CustomValidator验证控件验证用户输入的字符长度、Linq 多字段分组统计、ASP.NET后台弹出confirm对话框,然后点击确定,执行一段代码
- 最大长度验证控件:MaxLengthValidator
- [ASP.NET-VII] ASP.NET 使用验证控件(RegularExpressionValidator)验证输入(TextBox)中的输入是否合法
- c# asp.net RangeValidator(范围验证)控件(11)
- Javascript脚本和asp.net验证控件同时验证的代码
- asp.net控件RequiredFieldValidator验证FCKeditor提交两次才能成功的解决方法
- ASP.NET验证控件RegularExpressionValidator的常见表达式
- ASp.net验证控件RegularExpressionValidator
- ASP.NET一个页面多个Button按钮事件避免数据验证控件RequiredFieldValidator冲突方法
- ASP.NET验证控件之RequiredFieldValidator
- 解决Asp.net Web网站发布到服务器上运行时,某界面传参数过多,造成的“此请求的查询字符串的长度超过配置的 maxQueryStringLength 值”错误。
- ASP.NET一个页面多个Button按钮事件避免数据验证控件RequiredFieldValidator冲突方法
- ASP.NET - ASP.NET 服务器控件验证类型 - RegularExpressionValidator 类
- ASP.NET验证控件之RangeValidator
- asp.net 验证控件RequiredFieldValidator与js冲突的解决
- ASP.NET一个页面多个Button按钮事件避免数据验证控件RequiredFieldValidator冲突方法
- ASP.NET必须字段验证控件RequiredFieldValidator