时间:2016-02-15 23:40 来源: 我爱IT技术网 作者:佚名
欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【asp.net MaxLengthValidator 最大长度验证控件代码】,下面是详细的讲解!
asp.net MaxLengthValidator 最大长度验证控件代码
/// <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 最大长度验证控件代码的用户互动如下:
相关问题:
答: >>详细
相关问题:
答: >>详细
相关问题:
答: >>详细
- 【asp】asp.net url重写浅谈-net-url重写
- 【DataSet】DataSet、DataTable、DataRow区别详解
- 【asp】asp.net 动态添加多个用户控件-net-动态添
- 【创建】ASP.NET Web API教程 创建域模型的方法详
- 【Asp】Asp.net 页面调用javascript变量的值-net-
- 【ASP】ASP.NET 5升级后如何删除旧版本的DNX-NET5
- 【404页面】ASP.NET设置404页面返回302HTTP状态码
- 【asp】asp.net开发中常见公共捕获异常方式总结(
- 【Visual】分享Visual Studio原生开发的10个调试
- 【全局】.net全局定时定期执行某些操作在Global.a
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
