分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

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

发布时间:2023-09-06 02:22责任编辑:赖小花关键词:Web

一、呈现方法

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

 1 //该方法为入口方法 2 public virtual void RenderControl (HtmlTextWriter writer) ???3 { ????????4 ??this.RenderControl(writer,this.xxxAdapter); ???5 } ???6 ??7 protected void RenderControl(HtmlTextWriter writer, ControlAdapter adapter) ???8 { 9 ??if (adapter != null)10 ??{11 ????//调用相关的适配器方法12 ??}13 ??else14 ??{15 ????this.Render(writer);16 ??} ??17 }18 ?19 protected internal virtual void Render(HtmlTextWriter writer)20 {21 ??this.RenderChildren();22 }23 ?24 protected internal virtual void RenderChildren(HtmlTextWriter writer)25 {26 ??//呈现子控件 ?27 }28 ?29 /*30 整个呈现顺序就是: ??31 1.RenderControl(HtmlTextWriter writer) ??32 2.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) ??33 3.Render(HtmlTextWriter writer) ??34 4.RenderChildren(HtmlTextWriter writer)35 */

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

 1 protected override void Render(HtmlTextWriter writer) ??2 { ??????????3 ??this.RenderBeginTag(writer); ??4 ??this.RenderContents(writer); ??5 ??this.RenderEndTag(writer); ??6 } ?7 ??8 public virtual void RenderBeginTag ?(HtmlTextWriter writer) ??9 { ?10 ??this.AddAttributesToRender(writer); ?11 ??//呈现Tag开始标记 12 } ?????13 ??14 protected internal virtual void RenderContents ?(HtmlTextWriter writer) ?15 { ?16 ??//调用Control的呈现 ?17 ??base.Render(writer); ?18 } ??19 ??20 public virtual void RenderEndTag(HtmlTextWriter writer) ?21 { ?22 ??//呈现结束标记 ?23 } ??24 ??25 protected virtual void AddAttributesToRender ?(HtmlTextWriter writer) ?26 { ?27 ??//呈现Attribute 28 } 

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

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

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

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中注册

 1 <configuration> 2 ??<system.web> ????3 ????<pages> 4 ??????<controls> 5 ????????<add tagPrefix="scottgu" src="~/Controls/Header.ascx" tagName="header"/> 6 ????????<add tagPrefix="scottgu" src="~/Controls/Footer.ascx" tagName="footer"/> 7 ????????<add tagPrefix="ControlVendor" assembly="ControlVendorAssembly"/> 8 ??????</controls> 9 ????</pages>10 ??</system.web>11 </configuration> 

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

原文地址:https://www.cnblogs.com/lgx5/p/9966023.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved