首页 > Web开发 > 详细

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

时间:2016-02-08 15:38:54      阅读:260      评论:0      收藏:0      [点我收藏+]
复制代码 代码如下:

/// <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 最大长度验证控件代码

原文:http://www.jb51.net/article/21637.htm

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!