asp.net MaxLengthValidator 最大长度验证控件代码_asp.net教程-查字典教程网
asp.net MaxLengthValidator 最大长度验证控件代码
asp.net MaxLengthValidator 最大长度验证控件代码
发布时间:2016-12-29 来源:查字典编辑
摘要:复制代码代码如下://////TextBox的最大长度验证器,如果是varchar,char字段类型,需要此验证///[Descriptio...

复制代码 代码如下:

/// <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教程学习
    热门asp.net教程学习
    编程开发子分类