Heim > Backend-Entwicklung > C#.Net-Tutorial > asp.net MaxLengthValidator-Steuercode für die maximale Längenvalidierung

asp.net MaxLengthValidator-Steuercode für die maximale Längenvalidierung

高洛峰
Freigeben: 2017-01-07 11:36:21
Original
1779 Leute haben es durchsucht

/// <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); 
} 
}
Nach dem Login kopieren


Weitere Artikel zum Steuercode für die maximale Längenvalidierung von asp.net MaxLengthValidator finden Sie auf der chinesischen PHP-Website!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage