您的位置:首页 > 编程语言 > ASP

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); 
} 
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐