当前位置:首页 > 网络编程 > WEB编程 > ASP.net >  ASP.NET2.0服务器控件之Render方法(2)

 ASP.NET2.0服务器控件之Render方法(2)

点击次数:21 次 发布日期:2008-11-26 13:58:27 作者:源代码网
源代码网推荐      使用Render方法实现控件呈现
源代码网推荐  
源代码网推荐     1、基础知识
源代码网推荐  
源代码网推荐     本文所讲解的Render方法隶属于System.Web.UI.Controls.Control类。该类是创建服务器控件的基类,很多控件类均继承自该类。在Control类中包括三个用于实现控件呈现的方法:Render、RenderChildren和RenderControl。它们都使用HtmlTextWriter的实例作为参数,它们允许为一个HtmlTextWriter对象提供服务器控件的内容,并将其内容封装至HTTP输出流中输出到客户端显示。下面简单对这三个方法进行简单介绍。
源代码网推荐  
源代码网推荐     (1) protected virtual void Render(HtmlTextWriter writer);
源代码网推荐  
源代码网推荐     该方法用于将服务器控件内容发送到提供的HtmlTextWriter对象,此对象编写将在客户端呈现的内容。在开发服务器控件时,可以重写此方法以呈现服务器控件。
源代码网推荐  
源代码网推荐     (2) protected virtual void RenderChildren(HtmlTextWriter writer);
源代码网推荐  
源代码网推荐     该方法用于将服务器控件子级的内容输出到提供的HtmlTextWriter对象,此对象编写将在客户端呈现的内容。该方法通知ASP.net呈现页中的所有Active Server Pages代码。如果页上没有任何ASP代码,此方法将呈现服务器控件的所有子控件。
源代码网推荐  
源代码网推荐     (3) protected virtual void RenderControl(HtmlTextWriter writer);和protected void RenderControl (HtmlTextWriter writer,ControlAdapter adapter)
源代码网推荐  
源代码网推荐     RenderControl有两个重载方法,它们都用于将服务器控件的内容输出到所提供的HtmlTextWriter对象中。如果已启用跟踪功能,则存储有关控件的跟踪信息。如果服务器控件的Visible属性设置为true,该方法将确定是否启用页的跟踪功能。如果启用,它将存储与控件有关的跟踪信息,同时向页呈现服务器控件的内容。另外,前一个重载方式是ASP.NET 2.0从ASP.NET 1.0中继承而言,后一个重载方式是ASP.NET 2.0新增的。后者具体使用提供的ControlAdapter对象将服务器控件内容输出到提供的HtmlTextWriter对象。其中参数adapter是ControlAdapter类型,它用于定义呈现的ControlAdapter。当实现在各种设备和浏览器中运行的服务器控件时,该方法比较常用。
源代码网推荐  
源代码网推荐     以上3个方法看起来好像是独立的3个方法,然而,实际上它们之间存在密切的联系。读者可通过阅读以下示意性代码,从而理解它们之间的关系。
源代码网推荐  
源代码网推荐   //RenderCotrol方法基本实现
源代码网推荐   public void RenderControl(HtmlTextWriter output)
源代码网推荐   {
源代码网推荐    if(Visible)
源代码网推荐    {
源代码网推荐     Render(output);
源代码网推荐    }
源代码网推荐   }
源代码网推荐   //Render方法基本实现
源代码网推荐   protected virtual void Render(HtmlTextWriter output)
源代码网推荐   {
源代码网推荐    RenderChildren(output);
源代码网推荐   }
源代码网推荐   //RenderChildren方法基本实现
源代码网推荐   protected virtual void RenderChildren(HtmlTextWriter output)
源代码网推荐   {
源代码网推荐    foreach(Control c in Controls)
源代码网推荐    {
源代码网推荐     c.RenderControl(output);
源代码网推荐    }
源代码网推荐   }
源代码网推荐  
源代码网推荐     如上代码所示,其中列举了RenderControl、Render、RenderChildren方法的实现思路。显而易见的是,在控件呈现过程中,这三个方法都在起着作用,而且使用了一个简单的递归调用过程。大体而言,可以理解为:
源代码网推荐  
源代码网推荐     (1)页面框架建立一个HtmlTextWriter类的实例;
源代码网推荐  
源代码网推荐     (2)页面框架将这个实例对象传递给RenderControl方法;
源代码网推荐  
源代码网推荐     (3)RenderControl方法检查控件的可视属性Visible是否为true。如果为true,RenderControl方法将调用Render方法;如果为false,则不呈现该控件和其子控件;
源代码网推荐  
源代码网推荐     (4)Render方法执行默认实现,调用RenderChildren方法;
源代码网推荐  
源代码网推荐     (5)RenderChildren方法按照默认实现中的设定调用每个子控件的RenderControl方法;
源代码网推荐  
源代码网推荐     实际上,如果读者短时间内不能理解以上过程也没有很大的关系。对于初学者而言,关键是要记住最重要、最常用的是Render方法。控件开发者可以通过重写Render方法完成呈现控件的任务。
源代码网推荐  
源代码网推荐     2、示例应用
源代码网推荐  
源代码网推荐     上文介绍了使用Control类的Render方法实现控件呈现的基础知识。下面将通过一个典型示例,帮助读者初步理解Render的使用方法。示例效果如图1所示。
源代码网推荐  
源代码网推荐  
源代码网推荐    如图1所示,该服务器控件呈现了一个超链接,并且设置了文本为红色。当用户单击红色文字时,页面将转向微软站点。当然,用户可以通过属性LinkUrl来设置超链接地址。
源代码网推荐  
源代码网推荐     下面列举了示例实现源代码。
源代码网推荐  
源代码网推荐   using System;
源代码网推荐   using System.Collections.Generic;
源代码网推荐   using System.ComponentModel;
源代码网推荐   using System.Text;
源代码网推荐   using System.Web;
源代码网推荐   using System.Web.UI;
源代码网推荐   using System.Web.UI.WebControls;
源代码网推荐   namespace UsingRenderControl
源代码网推荐   {
源代码网推荐    [DefaultProperty("LinkUrl")]
源代码网推荐    [ToolboxData("<{0}:RenderControl runat=server></{0}:RenderControl>")]
源代码网推荐    public class RenderControl : Control
源代码网推荐    {
源代码网推荐     // 实现LinkUrl
源代码网推荐     [Bindable(true)]
源代码网推荐     [Category("Appearance")]
源代码网推荐     [DefaultValue("http://localhost/")]
源代码网推荐     [Localizable(true)]
源代码网推荐     public string LinkUrl
源代码网推荐     {
源代码网推荐      get { String s = (String)ViewState["LinkUrl"];
源代码网推荐       return ((s == null) ? String.Empty : s);}
源代码网推荐      set { ViewState["LinkUrl"] = value; }
源代码网推荐     }
源代码网推荐     // 重写Render方法
源代码网推荐     protected override void Render(HtmlTextWriter writer)
源代码网推荐     {
源代码网推荐      writer.AddAttribute(HtmlTextWriterAttribute.Href, LinkUrl);
源代码网推荐      writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "red");
源代码网推荐      writer.RenderBeginTag(HtmlTextWriterTag.A);
源代码网推荐      writer.Write("浏览网站");
源代码网推荐      writer.RenderEndTag();
源代码网推荐     }
源代码网推荐    }
源代码网推荐   }
源代码网推荐  
源代码网推荐     如上代码实现了自定义服务器控件类RenderControl。该类从Control基类继承,具体实现了表示超链接地址的LinkUrl(默认值为http://localhost/),并重写了Render方法。在重写Render的过程中,调用了一些HtmlTextWriter类成员,例如,Writer、AddAttribute、AddStyleAttribute、RenderBeginTag和RenderEndTag方法等。另外,可能开发人员在使用Writer方法过程中,需要呈现一个比较长的字符串。建议此时多多使用Writer方法,而不要使用字符串级联或者StringBuilder类的相关方法进行实现。因为,那样将会消耗大量的系统时间和内存,效率较低。  做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
源代码网推荐


源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华