快速业务通道

Asp.net 3.5控件和组件开发技术系列—服务器控件属性(五)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
     lb.ForeColor = System.Drawing.Color.Red;
       lb.Text = "值输入范围必须在:" + numValidateAttribute.MinValue.  ToString
       () + "~" + numValidateAttribute.MaxValue.ToString() + "之 间!";
       td_right.Controls.Add(lb);
       tr.Controls.Add(td_right);
     }
     t.Controls.Add(tr);

     t.RenderControl(writer);
   }

   private NumValidateAttribute GetNumValidateArribute()
   {
     System.Type type = this.GetType();
     PropertyInfo property = type.GetProperty("Num");
     object[] attrs = (object[])property.GetCustomAttributes(true);
     foreach (Attribute attr in attrs)
     {
       if (attr is NumValidateAttribute)
       {
         return attr as NumValidateAttribute;
       }
     }
     return null;
   }
}

主控件输出一个文本框,开发人员在设计器属性窗口中可以修改文本框的值。控件中的属性Num ,就是用来存储文本框的值的。Num 属性使用了我们刚刚定义的自定义属性验证证类 NumValidateAttribute :

[NumValidate(0, 10)]

注意在使用时,关键字使用的不是我们定义的完整类名。实际上这里使用[NumValidate(0, 10)] 和 [NumValidateAttribute(0, 10)] 都是可以的,系统都会把后缀Attribute 省略,而且智 能提示也会省略Attribute ,因此我们在使用时也把Attribute 省略了。

我们设置NumValidate 属性并传入两个参数:0 和10 ,以及Num 的类型为int 类型,表示要求 这个Num 属性必须是0 ~ 10 之间的整型数值。在设计模式和运行模式执行时,系统会把0 和10 作 为NumValidateAttribute 类的构造参数创建实例。

接下来是Render 方法,在Render 方法中主要执行两个功能:一是输出TextBox 内容,并嵌套 到Table 对象中;二是实现对设计期间的输入验证。验证过程代码如下:

NumValidateAttribute numValidateAttribute = this.GetNumValidateArribute ();
if (numValidateAttribute.ValidateResult(this.Num) == false)
{
   TableCell td_right = new TableCell();
   Label lb = new Label();
   lb.ForeColor = System.Drawing.Color.Red;
   lb.Text = "值输入范围必须在:" + numValidateAttribute.MinValue.ToString() +  "~" + numValidateAttribute.MaxValue.ToString() + "之间!";
   td_right.Controls.Add(lb);
   tr.Controls.Add(td_right);
}

以上代码首先获取我们在属性上指定的自定义验证属性实例对象,然后以主控件的Num 值作为 参数,调用验证属性对象的ValidateResult 方法进行输入合法验证,如果当前输入值验证失败 (Num 在我们设定的0~10 之间,这里仅模拟验证逻辑),则会在当前行中增加一个单元格,并在 单元格中增加一个显示出错警告的Label 控件,告知开发人员合法输入值正确范围;反之,验证成 功,则不会呈现出单元格和提示警告信息Label 控件。

接下来说明自定义属性对象实例是怎样获取到的,方法GetNumValidateArribute 获取属性对象 的代码,其使用反射机制取得。代码如下:

System.Type type = this.GetType();
PropertyInfo property = type.GetProperty("Num");

首先取得当前控件类的类型,再根据类型调用以Num 属性为参数,调用GetProperty 方法取得 属性的PropertyInfo 对象property ,PropertyInfo 可以提供对属性元数据

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号