欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-06-14 14:58:24
...
/// <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); 
} 
}


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