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

3 篇文章 0 订阅
1 篇文章 0 订阅

一、呈现方法

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> 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值