中国站长下载-为中国站长提供最好最全的建站资源! 首 页发布资源有事留言繁體中文
设为首页
加入收藏
联系我们
 
您当前的位置:中国站长下载 -> 文章中心 -> 网页编程 -> .NET编程 -> 文章内容  虚拟主机 域名注册 退出登录 用户管理
栏目导航
· ASP编程 · .NET编程
· PHP编程 · JSP编程
· CGI 专区
热门文章
· sndvol32 - sndvol3...
· [组图] FLASH:《大话李白》...
· 个人网站到底能赚多...
· [图文] Rundll.exe是病毒吗...
· [组图] Flash:制作MV
· 价值12万元的网站SE...
· 网站创业者,你需要...
· 一个成功的网站设计...
· [图文] FLASH:韩国导航条解...
· 中国网站的赚钱模式...
相关文章
· [图文] 用ASP.NET 2.0设计网...
· [图文] 用ASP.NET 2.0设计网...
· [图文] 用ASP.NET 2.0设计网...
· [图文] 用ASP.NET 2.0设计网...
· [图文] 用ASP.NET 2.0设计网...
· ASP.NET中WebForm组...
· ASP.NET中WebForm组...
· ASP.NET中WebForm组...
· ASP.NET中WebForm组...
· ASP.NET计数器
ASP.NET2.0服务器控件之Render方法(2)
作者:不详  来源:不详  发布时间:2006-8-14 8:34:55  发布人:chinazhan

 减小字体 增大字体

     使用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类的相关方法进行实现。因为,那样将会消耗大量的系统时间和内存,效率较低。  做人要厚道,请注明转自chinazhan中国站长(www.ChinaZhan.com)。

 
[] [返回上一页] [打 印] [收 藏]
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
中国站长下载
中国站长下载

本页只接受PR>=4 IT类站点连接,申请连接,谢谢您们的支持!希望我们的下载站能够真正帮到中国的站长们!
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图
Copyright © 2005-2006 ChinaZhan.Net. All Rights Reserved .