ASP.NET服务器控件编程浅析

开发 后端
ASP.NET服务器控件编程提供了4个有关呈现的方法,分别是Render、RenderChildren、RenderContents和RenderControl,这4个方法都有一个HtmlTextWriter类型的参数。

当用户向请求一个页面时,服务器端会向客户端发送一段文本,包括可显示标记字符和不可显示的文本,当这段文本到达客户端后,再通过客户端的浏览器(如IE)把可视化的标记字符转化为可视呈现给用户,所以在用户请求一个aspx页面时,页面上的Asp.net服务器控件,也会把文本写入到返回的文本流中,在本章中我们将讲述这一过程,学习ASP.NET服务器控件编程的相关知识。

ASP.NET服务器控件编程提供了4个有关呈现的方法,分别是Render、RenderChildren、RenderContents和RenderControl,这4个方法都有一个HtmlTextWriter类型的参数。HtmlTextWriter的作用就是把标记字符和文本写入倒Asp.net服务器控件流中,它是System.Web.UI名称空间所有标记编写器的基类,包括ChtmlTextWriter、Html32TextWriter和XhtmlTextWriter,这些类用于针对不同的标记类型编写元素、属性、样式和布局信息。

既然有4个有关呈现的方法,那它们的作用分别是什么?它们之间有什么区别呢?我们以一个控件的生成过程来说明:

每个页面都有一个控件树,代表本页面所拥有的所有子控件,页面控件就是控件树的根,为了生成控件树,页面将建立一个HtmlTextWriter类的实例;在这个实例中封装了相应流,接着页面会把HtmlTextWriter对象传递给RenderControl,RenderControl会检查控件的Visible属性是否为真,如果是真,RenderControl会调用Render方法,而Render方法会去调用RenderContents,RenderContents方法负责将控件的内容呈现到指定的编写器中,如果控件有子控件的话,Render方法又会把HtmlTextWriter传递给RenderChildren方法,RenderChildren方法负责生成控件的子控件。

我们以一个例子来说明ASP.NET服务器控件编程的过程。

public class Class1 : WebControl  
{  
protected override void Render  
(System.Web.UI.HtmlTextWriter writer)  
{  
writer.Write("RenderChildren〈br 〉");  
base.Render(writer);  
}  
 
protected override void RenderChildren  
(System.Web.UI.HtmlTextWriter writer)  
{  
writer.Write("RenderChildren〈br 〉");  
base.RenderChildren(writer);  
}  
 
public override void RenderControl  
(System.Web.UI.HtmlTextWriter writer)  
{  
writer.Write("RenderControl〈br 〉");  
base.RenderControl(writer);  
}  
 
protected override void RenderContents  
(System.Web.UI.HtmlTextWriter writer)  
{  
writer.Write("RenderContents〈br 〉");  
base.RenderContents(writer);  
}  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.

效果如下的图1(RenderControl—〉Render—〉RenderContents—〉RenderChildren):

 

在ASP.NET服务器控件编程中HtmlTextWrite的各种方法的参数取值用到三种枚举类型:HtmlTextWriteTag、HtmlTextWriteAttribute和HtmlTextWriteStyle,在这里不作详细的讲解,举例如下,效果如上图的图2:

[DefaultProperty("Text")]  
[ToolboxData("〈{0}:WebCustomControl1   
runat=server〉〈/{0}:WebCustomControl1〉")]  
public class WebCustomControl1 : WebControl  
{  
protected override void Render  
(HtmlTextWriter output)  
{  
// -----------------------------------------  
// ***种方式,通过Add + [Attribute、  
StyleAttribute、BeginTag\EndTag]  
// AddAttribute、AddStyleAttribute  
在RenderBeginTag和RenderEndTag之前  
output.BeginRender();  // 开始Render  
output.AddAttribute(HtmlTextWriterAttribute.  
Value, "This is input.");   
// 使用HtmlTextWriteAttribute枚举  
output.AddStyleAttribute(HtmlTextWriterStyle.  
BackgroundColor, ColorTranslator.ToHtml  
(Color.GreenYellow));     
// 使用HtmlTextWriteStyle枚举  
output.RenderBeginTag(HtmlTextWriterTag.Input);     
// 使用HtmlTextWriteTag枚举  
output.RenderEndTag();  
output.EndRender(); // 结束Render  
// ------------------------------------------  
 
   
// -------------------------------------------  
// 第二种方式,通过Write + [Attribute、  
StyleAttribute、BeginTag\EndTag]  
// WriteAttribute、WriteStyleAttribute  
在WriteBeginTag和WriteEndTag之间  
output.WriteBeginTag("input");     
// 直接标记的名称,不使用HtmlTextWriteTag枚举  
output.WriteAttribute("value""This is input too.");    
// 直接使用属性名称,不使用HtmlTextWriteAttribute枚举  
output.Write(" style=\"");  
output.WriteStyleAttribute("background-color",   
ColorTranslator.ToHtml(Color.Lavender));    
// 直接使用样式标记,不使用HtmlTextWriteStyle枚举  
output.Write("\"");  
output.Write(HtmlTextWriter.TagRightChar);  // 添加“〉”标记  
output.WriteEndTag("input");  
// -----------------------------------------------  
 
// 第二种适用于对html比较熟悉的朋友。  
}  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.

【编辑推荐】

  1. ASP.NET环境下的Shell函数
  2. 在ASP.NET中向数据库批量插入数据
  3. ASP.NET用Post方式向网页发送数据
  4. ASP.NET 2.0部署WEB应用程序浅析
  5. ASP.NET中的HttpWorkerRequest对像
  6. 介绍ASP.NET MVC框架
责任编辑:冰荷 来源: diybl
相关推荐

2009-08-10 14:25:33

ASP.NET服务器控

2009-08-05 17:11:51

ASP.NET控件开发ASP.NET服务器控

2009-08-07 17:49:44

控件设计器

2009-07-28 09:46:53

ASP.NET服务器控

2009-08-06 10:49:45

ASP.NET服务器控

2009-08-06 10:10:31

ASP.NET服务器控ASP.NET Ren

2009-08-06 11:05:48

ASP.NET服务器控

2009-08-06 11:24:50

ASP.NET服务器控

2009-08-04 13:10:05

ASP.NET服务器控

2009-08-10 14:08:15

ASP.NET服务器控ASP.NET组件设计

2011-07-12 15:17:02

ASP.net服务器控件

2009-08-04 17:18:37

2009-07-27 17:25:53

ASP.NET验证控件

2009-07-30 16:52:38

复合控件ASP.NET服务器控

2009-08-06 14:16:04

ASP.NET服务器控

2009-08-07 15:24:16

ASP.NET模板控件

2009-08-04 13:39:43

ASP.NET 2.0

2009-08-04 15:13:38

2009-07-27 12:56:27

控件CheckBoxLASP.NET服务器

2009-07-24 18:02:46

ASP.NET编程
点赞
收藏

51CTO技术栈公众号