快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
//   可以对返回值应用属性
   ReturnValue = 8192,
   //
   // 摘要:
   //   可以对泛型参数应用属性
   GenericParameter = 16384,
   //
   // 摘要:
   //   可以对任何应用程序元素应用属性
   All = 32767,
}

AllowMultiple 属性指示元素中是否可存在属性的多个实例。该属性为bool 类型,默认值为 false ,标识我们自定义的Attribte 是否能在同一元素上使用多次;如果设置为false ,则同一 语言元素上只能使用一次。如果设置为AllowMultiple=true ,则属性可以这么使用:

/// <summary>
/// 获得本书更多内容,请看:
/// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx
/// </summary>
[CustomAttribute]
[CustomAttribute]
public void Method()
{
   //……
}

最后一个参数Inherited ,也是bool 类型的。我们可以使用该属性来控制我们的自定义 attribute 类的继承规则,该属性标识我们的自定义Attribute 在应用到元素(别名A )时,是否 可以由派生类(继承于A 所属的类)继承。如果设置为true ,则可以被继承;反之,不可以被继 承。

更深一点理解,AllowMultiple 和 Inherited 还可以组合使用,完成我们需要的设置功能。如 果AllowMultiple=true ,且Inherited=true ,且基类A 和B 类(继承A 类)中都有相同名称的一 个属性,则实际上B 类中有两个相同名称的属性,即两个不同的实例,自己定义的一个和从基类继 承来的一个;如果设置AllowMultiple=false, Inherited=true ,且基类A 和B (继承A 类)中都 有相同名称的一个属性,则这时B 类中只有一个属性,即自己定义的实例,因为 AllowMultiple=false 指定不允许多实例并存,系统只能用B 类定义的属性重写A 类的属性定义。 如果不按正确方式使用,编译程序会提示警告信息。

到此自定义属性类就已经讲解完了,下面讲解一下此属性类是怎么使用的。笔者专门做了个控 件来讲解属性类在控件中是怎么使用的,主控件源代码如下:

/// <summary>
/// 获得本书更多内容,请看:
/// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx
/// </summary>

[DefaultProperty("Num")]
[ToolboxData("<{0}:CustomPropertyControl runat=server></ {0}:CustomPropertyControl>")]
public class CustomPropertyControl : WebControl
{
   TextBox tb;
   int intNum = 0;
   [Category("Appearance")]
   [NumValidate(0, 10)]
   [Description("输入值范围(0~10)")]
   public int Num 
   {
     get
     {
       return intNum;
     }

     set
     {
       intNum = value;
     }
   }

   protected override void Render(HtmlTextWriter writer)
   {
     Table t = new Table();
     t.CellPadding = 0;
     t.CellSpacing = 0;
     TableRow tr = new TableRow();

     TableCell td_left = new TableCell();
     tb = new TextBox();
     tb.Text = this.intNum.ToString();
     td_left.Controls.Add(tb);
     tr.Controls.Add(td_left);

     NumValidateAttribute numValidateAttribute = this.GetNumValidate  Arribute();
     if (numValidateAttribute.ValidateResult(this.Num) == false)
     {
       TableCell td_right = new TableCell();
       Label lb = new Label();
  

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号