首页 >后端开发 >C#.Net教程 >asp.net MaxLengthValidator 最大长度验证控件代码

asp.net MaxLengthValidator 最大长度验证控件代码

高洛峰
高洛峰原创
2017-01-07 11:36:211793浏览

/// <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 == &#39;true&#39;) 
{ 
realLength = MaxLengthValidator_GetNonNationalLength(targetValue); 
} 
return realLength <= parseInt(maxLength); 
}"; 
ScriptManager.RegisterClientScriptBlock(this, 
typeof(MaxLengthValidator), 
"MaxLengthValidator_Validate", 
script, 
true); 

base.OnPreRender(e); 
} 
}


更多asp.net MaxLengthValidator 最大长度验证控件代码相关文章请关注PHP中文网!


声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn