NRabbit

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 

服务端控件的呈现

 

Control类的呈现方法: 

 

点击放大

 

 

    

Control类的rendering(呈现)方法描述:

 

protected virtual void Render(HtmlTextWriter writer)

允许控件通过编写标记文本生成自身。当控件直接从Control类派生时,应该重载这个方法来生成所需的内容。

 

protected virtual void RenderChildren(HtmlTextWriter writer)

HtmlTextWriter对象的流中生成控件的子控件。默认情况下按照它们加入控件的Controls集合时的顺序生成。当需要改变子控件的默认逻辑时,要重载这个方法。比如需要在两个子控件中插入一些其他文本,就要重载此方法。

 

public void RenderControl(HtmlTextWriter writer)

生成一个控件。Render方法的类型是受保护的。而RenderControl的类型为公用的。它允许消费(使用)控件的一个类能够生成控件。例如,当页面生成控件树时,在每个子控件上都调用RenderControl方法。控件的设计器也会在可视化设计平台上调用RenderControl方法。作为控件开发人员,需要在生成一个子控件时调用RenderControl方法。当控件的Visible属性为真时,则RenderControl实际是通过调用Render方法来实现的。

 

WebControl类的呈现方式:

 

 

 

WebControl类的rendering方法

protected virtual void AddAttributesToRender(HtmlTextWriter writer)

使控件指定名/值对,作为Html元素标签的attribute提供。在重载AddAttributesToRender时,必须调用基类中相应的方法,否则控件将会失去大量控件重要的功能。WebControl基类按照这种方式实现将会生成大量控件属性作为Html attribute。例如,WebControl生成ClientID属性作为Htmlid attribute

public virtual void RenderBeginTag(HtmlTextWriter writer)

使Web控件在输出流中写入一个开始标签。如果想对开始标签进行不同的处理(例如,如果想生成多重的开始标签<table><tr><td>),重要重载这个方法。如果控件只生成一个标签并想重载WebControl产生的默认<span>标签,应该重载TagKeyTagName属性,而不必重载RenderBeginTag方法。

protected virtual void RenderContents(HtmlTextWriter writer)

使Web控件生成控件标签的内容。默认情况下,本方法会生成子控件树。如果要在控件的标签中写入文本或其他内容,需要重载这个方法。如果要使用默认逻辑来产生子控件,需要调用基类的相应方法。

public virtual void RenderEndTag(HtmlTextWriter writer)

使web控件在输出流中写入一个结束标签。只有提供的结束标志匹配按照RenderBeginTag方法(如果控件中重载此方法)创建的标签时,才需要重载此方法。例如在RenderBeginTag中生成多个开始标签(<table><tr><td>),那么在RenderEndTag中就要生成</table></tr></td>

 

WebControl属性,WebControl是如何输出Html标签的,

protected virtual HtmlTextWriterTag TagKey

{

    get

    {

        return this.tagKey;

    }

}

 

protected virtual string TagName

{

    get

    {

        if ((this.tagName == null) && (this.TagKey != HtmlTextWriterTag.Unknown))

        {

            this.tagName =”…”;

        }

        return this.tagName;

    }

}

派生的控件如果想替换WebControl生成的默认Span标签需要重载TagKey或TagName属性。

例如,生成div标签

/// <summary>
/// 输出div标签,重载了默认的Html标签
/// </summary>
protected override HtmlTextWriterTag TagKey
{
    get
    {
        return HtmlTextWriterTag.Div;
    }
}

posted on 2008-08-22 10:08  kevin.nrabbit  阅读(134)  评论(0编辑  收藏  举报