Asp.net 3.5控件和组件开发技术系列—服务器控件属性(五)
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)] 和 [NumValidateAttribute(0, 10)] 都是可以的,系统都会把后缀Attribute 省略,而且智 能提示也会省略Attribute ,因此我们在使用时也把Attribute 省略了。 我们设置NumValidate 属性并传入两个参数:0 和10 ,以及Num 的类型为int 类型,表示要求 这个Num 属性必须是0 ~ 10 之间的整型数值。在设计模式和运行模式执行时,系统会把0 和10 作 为NumValidateAttribute 类的构造参数创建实例。 接下来是Render 方法,在Render 方法中主要执行两个功能:一是输出TextBox 内容,并嵌套 到Table 对象中;二是实现对设计期间的输入验证。验证过程代码如下:
以上代码首先获取我们在属性上指定的自定义验证属性实例对象,然后以主控件的Num 值作为 参数,调用验证属性对象的ValidateResult 方法进行输入合法验证,如果当前输入值验证失败 (Num 在我们设定的0~10 之间,这里仅模拟验证逻辑),则会在当前行中增加一个单元格,并在 单元格中增加一个显示出错警告的Label 控件,告知开发人员合法输入值正确范围;反之,验证成 功,则不会呈现出单元格和提示警告信息Label 控件。 接下来说明自定义属性对象实例是怎样获取到的,方法GetNumValidateArribute 获取属性对象 的代码,其使用反射机制取得。代码如下:
首先取得当前控件类的类型,再根据类型调用以Num 属性为参数,调用GetProperty 方法取得 属性的PropertyInfo 对象property ,PropertyInfo 可以提供对属性元数据 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |