天天看點

asp.net元件(3):RenderControl,Render,RenderChildren三者的關系 - a-peng

我們主要研究RenderControl,Render,RenderChildren的執行順序.

三者的含義從他們的命名可以很清楚的看出.

RenderControl繪制控件

Render繪制

RenderChildren繪制子控件

看下面的代碼

public class UserComponent : Control

{

    public UserComponent()

    { 

    }

    public override void RenderControl(HtmlTextWriter writer)

    {

        writer.Write(@"<script language=\'javascript\'>alert(\'RenderControl\');</script>");

        //base.RenderControl(writer);

    }

    protected override void Render(HtmlTextWriter writer)

    {

        writer.Write(@"<script language=\'javascript\'>alert(\'Render\');</script>");

        //base.Render(writer);

    } 

    protected override void RenderChildren(HtmlTextWriter writer)

    {

         writer.Write(@"<script language=\'javascript\'>alert(\'RenderChildren\');</script>");

         //base.RenderChildren(writer);

    }

}

運作程式:隻彈出對話框 RenderControl

說明:最先被調用的是 RenderControl 繪制控件

将base.RenderControl(writer);的注釋去掉

public override void RenderControl(HtmlTextWriter writer)

{

   writer.Write(@"<script language=\'javascript\'>alert(\'RenderControl\');</script>");

   base.RenderControl(writer);

}

運作程式:彈出對話框 RenderControl 然後彈出對話框 Render

說明:控件通過 RenderControl 調用了 Redner

将base.Render(writer);的注釋去掉

protected override void Render(HtmlTextWriter writer)

{

        writer.Write(@"<script language=\'javascript\'>alert(\'Render\');</script>");

        base.Render(writer);

運作程式:彈出對話框 RenderControl 然後彈出對話框 Render 然後彈出對話框 RenderChildren

說明:控件通過 RenderControl 調用了 Redner 調用 RenderChildren

現在來看下面的代碼,應該有些感覺了吧...

using System;

using System.Web.UI;

namespace WebComponent

asp.net元件(3):RenderControl,Render,RenderChildren三者的關系 - a-peng

{

    public class UserComponent : Control

asp.net元件(3):RenderControl,Render,RenderChildren三者的關系 - a-peng

{

        public UserComponent()

asp.net元件(3):RenderControl,Render,RenderChildren三者的關系 - a-peng

        }

        public override void RenderControl(HtmlTextWriter writer)

asp.net元件(3):RenderControl,Render,RenderChildren三者的關系 - a-peng

{

            //writer.Write(@"<script language=\'javascript\'>alert(\'RenderControl\');</script>");

            //base.RenderControl(writer);

            if (this.Visible)

asp.net元件(3):RenderControl,Render,RenderChildren三者的關系 - a-peng

{

                Render(writer);

            }

        }

        protected override void Render(HtmlTextWriter writer)

asp.net元件(3):RenderControl,Render,RenderChildren三者的關系 - a-peng

{

            //writer.Write(@"<script language=\'javascript\'>alert(\'Render\');</script>");

            //base.Render(writer);

            RenderChildren(writer);

         }

        protected override void RenderChildren(HtmlTextWriter writer)

asp.net元件(3):RenderControl,Render,RenderChildren三者的關系 - a-peng

{

            //writer.Write(@"<script language=\'javascript\'>alert(\'RenderChildren\');</script>");

            //base.RenderChildren(writer);

            foreach (Control c in this.Controls)

asp.net元件(3):RenderControl,Render,RenderChildren三者的關系 - a-peng

{

                c.RenderControl(writer);

            }

        }

    }

}

asp.net元件(3):RenderControl,Render,RenderChildren三者的關系 - a-peng