庖丁解牛ASP.NET3.5控件和组件开发技术-(3)从零开始开发服务器控件
2010-01-13 14:06
666 查看
第二章服务器控件开发中的调试技术略,因为在开发当作调试技术用的很多。
选择基类:Control具有最基本的属性,WebControl有外观布局和样式等属性,CompositeControl实现了INamingContainer接口,现有控件。
控件呈现顺序:
RenderControl
Render
RenderBeginTag
RenderContents
RenderEndTag
3. Render呈现控件的基本方式
方式一:
方式二:
方式三:
第三种方式比第一二中方式效率低些,因为他要花些时间解析成HTML控件。
4. AddAttributesToRender方法,一般与RenderContents合用。
5。 CreateChildControls方法一般用于创建组合控件。
6。 INamingContainer接口,继承了此即可的控件,他的UniqueID和ClientID就会加上父控件的UniqueID和ClientID,分割符分别为$,_这样解决了控件命名冲突。
7. 实现复合控件的几个方法: CreateChildControls, ChildControlsCreated属性 ,EnsureChildControls,RecreateChildControl,Control属性, HasControls方法 HasEvent方法,FindControl方法
this.NamingContainer.ClientID + "_" + this.ID == this.ClientID;
8. 常用的开发技巧:
DesignMode运行模式和设计模式
屏蔽基类控件中的属性:Bindable,Browsable,EnditBrowsable
Page.Request.Browser属性检查当前浏览器的性能。
设置控件ID的规范,主要$和_运用。
FindControl通过遍历找控件
映射服务端控件值到客户端:
writer.AddAttribute("key",this.value);
就可以通过document.getElementBuId("").key获得
使用RegisterExpanddoAttribute方法
Page.ClientScript.RegisterExpandoAttribute("controlID","key",this.value)
禁止派生CompositeControl控件创建子控件
使用CreateChildControls注意事项:
设计元属性DefaultValue
Render里有很多基类资源
条件编译
选择基类:Control具有最基本的属性,WebControl有外观布局和样式等属性,CompositeControl实现了INamingContainer接口,现有控件。
控件呈现顺序:
RenderControl
Render
RenderBeginTag
RenderContents
RenderEndTag
3. Render呈现控件的基本方式
方式一:
output.AddAttribute(HtmlTextWriterAttribute.Href, "http://www.cnblogs.com/"); output.AddAttribute(HtmlTextWriterAttribute.Target, "blank"); output.AddStyleAttribute(HtmlTextWriterStyle.Color, "Blue"); output.AddStyleAttribute(HtmlTextWriterStyle.Cursor, "Hand"); output.RenderBeginTag(HtmlTextWriterTag.A); output.Write(this.Text1); output.RenderEndTag(); output.WriteBreak();
方式二:
output.Write("<a href="http://www.csdn.net" mce_href="http://www.csdn.net" target='blank' style="color:Blue;cursor:Hand;" mce_style="color:Blue;cursor:Hand;">"); output.Write(this.Text2); output.Write("</a>"); output.Write("<br>");
方式三:
HtmlGenericControl A = new HtmlGenericControl("A"); A.Attributes.Add("href", "http://blog.csdn.net/kntao"); A.Attributes.Add("target", "blank"); A.Style.Add(HtmlTextWriterStyle.Color, "Blue"); A.Style.Add(HtmlTextWriterStyle.Cursor, "Hand"); A.InnerText = this.Text3; A.RenderControl(output);
第三种方式比第一二中方式效率低些,因为他要花些时间解析成HTML控件。
4. AddAttributesToRender方法,一般与RenderContents合用。
protected override void AddAttributesToRender(HtmlTextWriter writer) { writer.AddAttribute(HtmlTextWriterAttribute.Border, "0px"); writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "0px"); writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "0px"); base.AddAttributesToRender(writer); }
5。 CreateChildControls方法一般用于创建组合控件。
6。 INamingContainer接口,继承了此即可的控件,他的UniqueID和ClientID就会加上父控件的UniqueID和ClientID,分割符分别为$,_这样解决了控件命名冲突。
7. 实现复合控件的几个方法: CreateChildControls, ChildControlsCreated属性 ,EnsureChildControls,RecreateChildControl,Control属性, HasControls方法 HasEvent方法,FindControl方法
this.NamingContainer.ClientID + "_" + this.ID == this.ClientID;
8. 常用的开发技巧:
DesignMode运行模式和设计模式
屏蔽基类控件中的属性:Bindable,Browsable,EnditBrowsable
Page.Request.Browser属性检查当前浏览器的性能。
设置控件ID的规范,主要$和_运用。
FindControl通过遍历找控件
private Control FindControlExtend(string id, ControlCollection controls) { int i; Control find = null; for (i = 0; i < controls.Count; i++) { if (controls[i].ID == id) { find = controls[i]; break; } if (controls[i].Controls.Count > 0) { find = FindControlExtend(id, controls[i].Controls); if (find != null) break; } } return find; }
映射服务端控件值到客户端:
writer.AddAttribute("key",this.value);
就可以通过document.getElementBuId("").key获得
使用RegisterExpanddoAttribute方法
Page.ClientScript.RegisterExpandoAttribute("controlID","key",this.value)
禁止派生CompositeControl控件创建子控件
使用CreateChildControls注意事项:
if (String.IsNullOrEmpty(this.ValidateExpression) == false && this.DesignMode == false) { writer.RenderBeginTag(HtmlTextWriterTag.Td); this.rev.RenderControl(writer); writer.RenderEndTag(); }
设计元属性DefaultValue
Render里有很多基类资源
条件编译
#if NET35 || NET20 using System.web.UI.WebControls.WebParts; #else //如果NET10 比编译任何代码 #endif
相关文章推荐
- ★★★【庖丁解牛:纵向切入Asp.net 3.5控件和组件开发技术系列—(3)从零开始开发服务器控件】★★★
- 庖丁解牛ASP.NET3.5控件和组件开发技术-(3)从零开始开发服务器控件
- 庖丁解牛ASP.NET3.5控件和组件开发技术-(1)服务器控件概述
- (一)庖丁解牛Asp.net3.5控件和组件开发技术系列—服务器控件开发中的调试技术-郑健
- ★★★【庖丁解牛:纵向切入Asp.net 3.5控件和组件开发技术系列—(2)服务器控件开发中的调试技术】★★★
- 庖丁解牛ASP.NET3.5控件和组件开发技术-(4)服务器控件属性
- 庖丁解牛ASP.NET3.5控件和组件开发技术-(4)服务器控件属性
- ★★★【庖丁解牛:纵向切入Asp.net 3.5控件和组件开发技术系列—(2)服务器控件开发中的调试技术】★★★
- ★★★【庖丁解牛:纵向切入Asp.net 3.5控件和组件开发技术系列—(2)服务器控件开发中的调试技术】★★★
- 庖丁解牛ASP.NET3.5控件和组件开发技术-(1)服务器控件概述
- 庖丁解牛:纵向切入ASP.NET 3.5控件和组件开发技术
- ★★★【庖丁解牛:纵向切入Asp.net 3.5控件和组件开发技术系列—(6)页面状态机制(视图状态和控件状态)】★★★
- ★★★【庖丁解牛:纵向切入Asp.net 3.5控件和组件开发技术系列—教程索引】★★★
- 庖丁解牛-Asp.net 3.5控件和组件开发技术一书已经成功出版
- 《庖丁解牛-纵向切入ASP.NET 3.5控件和组件开发技术》
- 庖丁解牛:纵向切入Asp.net 3.5控件和组件开发技术系列—教程
- 《庖丁解牛:纵向切入ASP.NET 3.5控件和组件开发技术》 --- 基于VS 2008(兼容VS 2005)/C#
- 书讯 —《庖丁解牛:纵向切入ASP.NET 3.5控件和组件开发技术》第二版
- 庖丁解牛:纵向切入Asp.net 3.5控件和组件开发技术—读者序
- 书讯 —《庖丁解牛:纵向切入ASP.NET 3.5控件和组件开发技术》第二次印刷已经出版发行