Control life cycle events not firing when control is invisible

Discussion in 'ASP .Net Building Controls' started by TS, Sep 29, 2008.

  1. TS

    TS Guest

    thru my testing it seems that neither createChildControls nor onPreRender
    will run if the control is invisible, but Render still runs. Am i correct
    and why does render run if the others dont?

    thanks for your input~!
     
    TS, Sep 29, 2008
    #1
    1. Advertisements

  2. Hi,

    Based on my test, none of them will run if the control is invisible. Here's
    my test code:
    public partial class WebForm1 : System.Web.UI.Page
    {
    protected void Page_Init(object sender, EventArgs e) {
    MyControl p = new MyControl();
    this.form1.Controls.Add(p);
    p.Controls.Add(new TextBox());
    p.Visible = false;

    }
    }
    public class MyControl : Panel
    {
    protected override void CreateChildControls()
    {
    base.CreateChildControls();
    }
    protected override void OnPreRender(EventArgs e)
    {
    base.OnPreRender(e);
    }
    protected override void Render(HtmlTextWriter writer)
    {
    base.Render(writer);
    }
    }

    Could you double check it? If the Render runs on your side please send me a
    demo project that can reproduce this problem. My email is
    .


    Regards,
    Allen Chen
    Microsoft Online Support

    Delighting our customers is our #1 priority. We welcome your comments and
    suggestions about how we can improve the support we provide to you. Please
    feel free to let my manager know what you think of the level of service
    provided. You can send feedback directly to my manager at:
    .

    ==================================================
    Get notification to my posts through email? Please refer to
    http://msdn.microsoft.com/en-us/subscriptions/aa948868.aspx#notifications.

    Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
    where an initial response from the community or a Microsoft Support
    Engineer within 1 business day is acceptable. Please note that each follow
    up response may take approximately 2 business days as the support
    professional working with you may need further investigation to reach the
    most efficient resolution. The offering is not appropriate for situations
    that require urgent, real-time or phone-based interactions or complex
    project analysis and dump analysis issues. Issues of this nature are best
    handled working with a dedicated Microsoft Support Engineer by contacting
    Microsoft Customer Support Services (CSS) at
    http://support.microsoft.com/select/default.aspx?target=assistance&ln=en-us.
    ==================================================
    This posting is provided "AS IS" with no warranties, and confers no rights.
    --------------------
    | From: "TS" <>
    | Subject: Control life cycle events not firing when control is invisible
    | Date: Mon, 29 Sep 2008 13:10:15 -0500
    | Lines: 7
    | X-Priority: 3
    | X-MSMail-Priority: Normal
    | X-Newsreader: Microsoft Outlook Express 6.00.2900.3028
    | X-RFC2646: Format=Flowed; Original
    | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3028
    | Message-ID: <>
    | Newsgroups: microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | NNTP-Posting-Host: 168.38.106.193
    | Path: TK2MSFTNGHUB02.phx.gbl!TK2MSFTNGP01.phx.gbl!TK2MSFTNGP02.phx.gbl
    | Xref: TK2MSFTNGHUB02.phx.gbl
    microsoft.public.dotnet.framework.aspnet.buildingcontrols:1121
    | X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.buildingcontrols
    |
    | thru my testing it seems that neither createChildControls nor onPreRender
    | will run if the control is invisible, but Render still runs. Am i correct
    | and why does render run if the others dont?
    |
    | thanks for your input~!
    |
    |
    |
     
    Allen Chen [MSFT], Sep 30, 2008
    #2
    1. Advertisements

  3. TS

    TS Guest

    I see the problem. After pre-render, the control was made visible, so during
    createChildControls & onPreRender the control was invisible but when Render
    came it was visible so render ran.

    that seems a little weird behavior, seems like all or none should run.
     
    TS, Sep 30, 2008
    #3
  4. Hi,

    I think it's reasonable. If we set visibility on certain stage before the
    Render the Render may run/not run. Here's the source code of the
    Control.RenderControl method and the RenderControlInternal method. Let's
    see what happens there:

    protected void RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
    {
    if (!this.flags[0x10] && !this.flags[0x200])
    {
    HttpContext context = (this.Page == null) ? null :
    this.Page._context;
    if ((context != null) && context.TraceIsEnabled)
    {
    int bufferedLength = context.Response.GetBufferedLength();
    this.RenderControlInternal(writer, adapter);
    int num2 = context.Response.GetBufferedLength();
    context.Trace.AddControlSize(this.UniqueID, num2 -
    bufferedLength);
    }
    else
    {
    this.RenderControlInternal(writer, adapter);
    }
    }
    }

    private void RenderControlInternal(HtmlTextWriter writer, ControlAdapter
    adapter)
    {
    if (adapter != null)
    {
    adapter.BeginRender(writer);
    adapter.Render(writer);
    adapter.EndRender(writer);
    }
    else
    {
    this.Render(writer);
    }
    }


    We can see if control's flags[0x10] is true the Render method will not run.
    The flags[0x10] represents the visibility of the control. To confirm this
    please try following code:

    Panel p = new Panel();
    protected void Page_Load(object sender, EventArgs e)
    {

    p.PreRender += new EventHandler(p_PreRender);
    p.Visible = false;//comment this line to test
    this.form1.Controls.Add(p);
    }
    protected override void OnSaveStateComplete(EventArgs e)
    {
    base.OnSaveStateComplete(e);
    //set a breakpoint here and check p.flags[0x10] in the watch window.
    }
    void p_PreRender(object sender, EventArgs e)
    {

    }


    Please feel free to ask if you have anything unclear.

    Regards,
    Allen Chen
    Microsoft Online Community Support

    --------------------
    | From: "TS" <>
    | References: <>
    <>
    | Subject: Re: Control life cycle events not firing when control is
    invisible
    | Date: Tue, 30 Sep 2008 14:23:32 -0500
    | Lines: 105
    | X-Priority: 3
    | X-MSMail-Priority: Normal
    | X-Newsreader: Microsoft Outlook Express 6.00.2900.3028
    | X-RFC2646: Format=Flowed; Original
    | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3028
    | Message-ID: <#>
    | Newsgroups: microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | NNTP-Posting-Host: 168.38.106.193
    | Path: TK2MSFTNGHUB02.phx.gbl!TK2MSFTNGP01.phx.gbl!TK2MSFTNGP05.phx.gbl
    | Xref: TK2MSFTNGHUB02.phx.gbl
    microsoft.public.dotnet.framework.aspnet.buildingcontrols:1124
    | X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.buildingcontrols
    |
    | I see the problem. After pre-render, the control was made visible, so
    during
    | createChildControls & onPreRender the control was invisible but when
    Render
    | came it was visible so render ran.
    |
    | that seems a little weird behavior, seems like all or none should run.
    |
    |
    | | > Hi,
    | >
    | > Based on my test, none of them will run if the control is invisible.
    | > Here's
    | > my test code:
    | > public partial class WebForm1 : System.Web.UI.Page
    | > {
    | > protected void Page_Init(object sender, EventArgs e) {
    | > MyControl p = new MyControl();
    | > this.form1.Controls.Add(p);
    | > p.Controls.Add(new TextBox());
    | > p.Visible = false;
    | >
    | > }
    | > }
    | > public class MyControl : Panel
    | > {
    | > protected override void CreateChildControls()
    | > {
    | > base.CreateChildControls();
    | > }
    | > protected override void OnPreRender(EventArgs e)
    | > {
    | > base.OnPreRender(e);
    | > }
    | > protected override void Render(HtmlTextWriter writer)
    | > {
    | > base.Render(writer);
    | > }
    | > }
    | >
    | > Could you double check it? If the Render runs on your side please send
    me
    | > a
    | > demo project that can reproduce this problem. My email is
    | > .
    | >
    | >
    | > Regards,
    | > Allen Chen
    | > Microsoft Online Support
    | >
    | > Delighting our customers is our #1 priority. We welcome your comments
    and
    | > suggestions about how we can improve the support we provide to you.
    Please
    | > feel free to let my manager know what you think of the level of service
    | > provided. You can send feedback directly to my manager at:
    | > .
    | >
    | > ==================================================
    | > Get notification to my posts through email? Please refer to
    | >
    http://msdn.microsoft.com/en-us/subscriptions/aa948868.aspx#notifications.
    | >
    | > Note: The MSDN Managed Newsgroup support offering is for non-urgent
    issues
    | > where an initial response from the community or a Microsoft Support
    | > Engineer within 1 business day is acceptable. Please note that each
    follow
    | > up response may take approximately 2 business days as the support
    | > professional working with you may need further investigation to reach
    the
    | > most efficient resolution. The offering is not appropriate for
    situations
    | > that require urgent, real-time or phone-based interactions or complex
    | > project analysis and dump analysis issues. Issues of this nature are
    best
    | > handled working with a dedicated Microsoft Support Engineer by
    contacting
    | > Microsoft Customer Support Services (CSS) at
    | >
    http://support.microsoft.com/select/default.aspx?target=assistance&ln=en-us.
    | > ==================================================
    | > This posting is provided "AS IS" with no warranties, and confers no
    | > rights.
    | > --------------------
    | > | From: "TS" <>
    | > | Subject: Control life cycle events not firing when control is
    invisible
    | > | Date: Mon, 29 Sep 2008 13:10:15 -0500
    | > | Lines: 7
    | > | X-Priority: 3
    | > | X-MSMail-Priority: Normal
    | > | X-Newsreader: Microsoft Outlook Express 6.00.2900.3028
    | > | X-RFC2646: Format=Flowed; Original
    | > | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3028
    | > | Message-ID: <>
    | > | Newsgroups: microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | > | NNTP-Posting-Host: 168.38.106.193
    | > | Path: TK2MSFTNGHUB02.phx.gbl!TK2MSFTNGP01.phx.gbl!TK2MSFTNGP02.phx.gbl
    | > | Xref: TK2MSFTNGHUB02.phx.gbl
    | > microsoft.public.dotnet.framework.aspnet.buildingcontrols:1121
    | > | X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | > |
    | > | thru my testing it seems that neither createChildControls nor
    | > onPreRender
    | > | will run if the control is invisible, but Render still runs. Am i
    | > correct
    | > | and why does render run if the others dont?
    | > |
    | > | thanks for your input~!
    | > |
    | > |
    | > |
    | >
    |
    |
    |
     
    Allen Chen [MSFT], Oct 2, 2008
    #4
  5. Hi,

    Have you got the expected answer?

    Regards,
    Allen Chen
    Microsoft Online Support
    --------------------
    | From: "TS" <>
    | References: <>
    <>
    | Subject: Re: Control life cycle events not firing when control is
    invisible
    | Date: Tue, 30 Sep 2008 14:23:32 -0500
    | Lines: 105
    | X-Priority: 3
    | X-MSMail-Priority: Normal
    | X-Newsreader: Microsoft Outlook Express 6.00.2900.3028
    | X-RFC2646: Format=Flowed; Original
    | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3028
    | Message-ID: <#>
    | Newsgroups: microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | NNTP-Posting-Host: 168.38.106.193
    | Path: TK2MSFTNGHUB02.phx.gbl!TK2MSFTNGP01.phx.gbl!TK2MSFTNGP05.phx.gbl
    | Xref: TK2MSFTNGHUB02.phx.gbl
    microsoft.public.dotnet.framework.aspnet.buildingcontrols:1124
    | X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.buildingcontrols
    |
    | I see the problem. After pre-render, the control was made visible, so
    during
    | createChildControls & onPreRender the control was invisible but when
    Render
    | came it was visible so render ran.
    |
    | that seems a little weird behavior, seems like all or none should run.
    |
    |
    | | > Hi,
    | >
    | > Based on my test, none of them will run if the control is invisible.
    | > Here's
    | > my test code:
    | > public partial class WebForm1 : System.Web.UI.Page
    | > {
    | > protected void Page_Init(object sender, EventArgs e) {
    | > MyControl p = new MyControl();
    | > this.form1.Controls.Add(p);
    | > p.Controls.Add(new TextBox());
    | > p.Visible = false;
    | >
    | > }
    | > }
    | > public class MyControl : Panel
    | > {
    | > protected override void CreateChildControls()
    | > {
    | > base.CreateChildControls();
    | > }
    | > protected override void OnPreRender(EventArgs e)
    | > {
    | > base.OnPreRender(e);
    | > }
    | > protected override void Render(HtmlTextWriter writer)
    | > {
    | > base.Render(writer);
    | > }
    | > }
    | >
    | > Could you double check it? If the Render runs on your side please send
    me
    | > a
    | > demo project that can reproduce this problem. My email is
    | > .
    | >
    | >
    | > Regards,
    | > Allen Chen
    | > Microsoft Online Support
    | >
    | > Delighting our customers is our #1 priority. We welcome your comments
    and
    | > suggestions about how we can improve the support we provide to you.
    Please
    | > feel free to let my manager know what you think of the level of service
    | > provided. You can send feedback directly to my manager at:
    | > .
    | >
    | > ==================================================
    | > Get notification to my posts through email? Please refer to
    | >
    http://msdn.microsoft.com/en-us/subscriptions/aa948868.aspx#notifications.
    | >
    | > Note: The MSDN Managed Newsgroup support offering is for non-urgent
    issues
    | > where an initial response from the community or a Microsoft Support
    | > Engineer within 1 business day is acceptable. Please note that each
    follow
    | > up response may take approximately 2 business days as the support
    | > professional working with you may need further investigation to reach
    the
    | > most efficient resolution. The offering is not appropriate for
    situations
    | > that require urgent, real-time or phone-based interactions or complex
    | > project analysis and dump analysis issues. Issues of this nature are
    best
    | > handled working with a dedicated Microsoft Support Engineer by
    contacting
    | > Microsoft Customer Support Services (CSS) at
    | >
    http://support.microsoft.com/select/default.aspx?target=assistance&ln=en-us.
    | > ==================================================
    | > This posting is provided "AS IS" with no warranties, and confers no
    | > rights.
    | > --------------------
    | > | From: "TS" <>
    | > | Subject: Control life cycle events not firing when control is
    invisible
    | > | Date: Mon, 29 Sep 2008 13:10:15 -0500
    | > | Lines: 7
    | > | X-Priority: 3
    | > | X-MSMail-Priority: Normal
    | > | X-Newsreader: Microsoft Outlook Express 6.00.2900.3028
    | > | X-RFC2646: Format=Flowed; Original
    | > | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3028
    | > | Message-ID: <>
    | > | Newsgroups: microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | > | NNTP-Posting-Host: 168.38.106.193
    | > | Path: TK2MSFTNGHUB02.phx.gbl!TK2MSFTNGP01.phx.gbl!TK2MSFTNGP02.phx.gbl
    | > | Xref: TK2MSFTNGHUB02.phx.gbl
    | > microsoft.public.dotnet.framework.aspnet.buildingcontrols:1121
    | > | X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | > |
    | > | thru my testing it seems that neither createChildControls nor
    | > onPreRender
    | > | will run if the control is invisible, but Render still runs. Am i
    | > correct
    | > | and why does render run if the others dont?
    | > |
    | > | thanks for your input~!
    | > |
    | > |
    | > |
    | >
    |
    |
    |
     
    Allen Chen [MSFT], Oct 9, 2008
    #5
  6. TS

    TS Guest

    yes, thanks

     
    TS, Oct 20, 2008
    #6
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.