.net自定义控件Control、WebControl、CompositeControl

来源:互联网 发布:电子商务美工论文范文 编辑:程序博客网 时间:2024/05/18 02:25

一、呈现方法

1、Control主要有以下4个方法用于呈现

//该方法为入口方法public virtual void RenderControl (HtmlTextWriter writer)   {          this.RenderControl(writer,this.xxxAdapter);   }   protected void RenderControl(HtmlTextWriter writer, ControlAdapter adapter)   {  if (adapter != null)  {    //调用相关的适配器方法  }  else  {    this.Render(writer);  }   }protected internal virtual void Render(HtmlTextWriter writer){  this.RenderChildren();}protected internal virtual void RenderChildren(HtmlTextWriter writer){  //呈现子控件  }/*整个呈现顺序就是:   1.RenderControl(HtmlTextWriter writer)   2.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)   3.Render(HtmlTextWriter writer)   4.RenderChildren(HtmlTextWriter writer)*/

2、WebControl在Control的基础上增加了Style,呈现方面就是在Render(HtmlTextWriter writer) 方法中扩展了三个呈现方法,增加一个属性呈现方法。

protected override void Render(HtmlTextWriter writer)  {        this.RenderBeginTag(writer);    this.RenderContents(writer);    this.RenderEndTag(writer);  } public virtual void RenderBeginTag  (HtmlTextWriter writer)  {    this.AddAttributesToRender(writer);    //呈现Tag开始标记 }        protected internal virtual void RenderContents  (HtmlTextWriter writer)  {    //调用Control的呈现    base.Render(writer);  }     public virtual void RenderEndTag(HtmlTextWriter writer)  {    //呈现结束标记  }     protected virtual void AddAttributesToRender  (HtmlTextWriter writer)  {    //呈现Attribute } 

3、CompositeControl重写了WebControl的Render (HtmlTextWriterwriter),增加了设计时支持以创建子控件

protected internal override void Render(HtmlTextWriterwriter)  {    //如果在设计时,创建子控件,也就是在设计时增加友好体验    if(DesignMode)      this.EnsureChildControls();    base.Render(writer);  }


二、自定义控件常用的特性

1、命名控件特性
① [assembly: TagPrefix("Samples.AspNet", "myControls")]   //指定@Register指令中的tagprefix值,Samples.AspNet是命名空间


2、控件特性
① [DefaultProperty("Text")]      //打开IDE属性窗口时默认选中的属性项
② [ToolboxData("<{0}:myCustomControl runat=server></{0}:myCustomControl>")]   //从工具箱拖放控件生成的默认标记,可以加上其它想默认显示的属性


3、属性特性
① [Bindable(true)]                //设置该属性是否支持绑定
② [DefaultValue("")]              //属性的默认值(如果在IDE属性栏里输入的值与该值相同,IDE中的这个值不变黑)。显示的默认值则要在构造函数里赋值。
③ [Localizable(true)]             //属性是否支持本地化
④ [Browsable(true)]               //该项属性是否会显示在控件的“属性”窗口中
⑤ [Description("显示的文本")]     //属性的说明
⑥ [Category("Appearance")]        //属性分组的类别名称,可以是自定义的值
   Action:“操作”组
   Appearance:“外观”组
   Behavior:“行为 ”组
   Data:“数据”组
   Default:“杂项”组
   Design:“设计”组
   DragDrop:“拖放”组
   Focus:“焦点”组
   Format:“格式”组
   Key:“键盘”组
   Layout:“布局”组
   Mouse:“鼠标”组
   WindowStyle:“窗口样式”组
⑦ [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]  //指定属性是否在网页的源代码中显示
    DesignerSerializationVisibility.Hidden   //在代码生成器中不生成属性代码,在aspx的源文件中将看不到此属性
    DesignerSerializationVisibility.Visible  //在代码生成器中生成属性代码
    DesignerSerializationVisibility.Content  //在代码生成器中生成的是属性内容的代码,而不是属性本身的代码。只影响aspx中的代码生成器中显示的属性。
⑧ [TypeConverter(typeof(ExpandableObjectConverter))]  //将类属性在IDE属性窗口显示出折叠
⑨ [NotifyParentProperty(true)]   //是否将属性窗口中对子属性的修改上传到对象模型,并在被修改了的子属性的控件中产生修改通知。

(枚举属性,类属性)



三、自定义控件在web.config中注册

<configuration>  <system.web>        <pages>      <controls>        <add tagPrefix="scottgu" src="~/Controls/Header.ascx" tagName="header"/>        <add tagPrefix="scottgu" src="~/Controls/Footer.ascx" tagName="footer"/>        <add tagPrefix="ControlVendor" assembly="ControlVendorAssembly"/>      </controls>    </pages>  </system.web></configuration> 


0 0
原创粉丝点击