Control life cycle events not firing when control is invisible


T

TS

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~!
 
Ad

Advertisements

A

Allen Chen [MSFT]

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
(e-mail address removed).


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:
(e-mail address removed).

==================================================
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" <[email protected]>
| 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: <[email protected]>
| 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~!
|
|
|
 
T

TS

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.
 
A

Allen Chen [MSFT]

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" <[email protected]>
| References: <[email protected]>
<[email protected]>
| 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: <#[email protected]>
| 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
| > (e-mail address removed).
| >
| >
| > 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:
| > (e-mail address removed).
| >
| > ==================================================
| > 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" <[email protected]>
| > | 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: <[email protected]>
| > | 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~!
| > |
| > |
| > |
| >
|
|
|
 
A

Allen Chen [MSFT]

Hi,

Have you got the expected answer?

Regards,
Allen Chen
Microsoft Online Support
--------------------
| From: "TS" <[email protected]>
| References: <[email protected]hx.gbl>
<[email protected]>
| 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: <#[email protected]>
| 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
| > (e-mail address removed).
| >
| >
| > 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:
| > (e-mail address removed).
| >
| > ==================================================
| > 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" <[email protected]>
| > | 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: <[email protected]>
| > | 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~!
| > |
| > |
| > |
| >
|
|
|
 
Ad

Advertisements

T

TS

yes, thanks

Allen Chen said:
Hi,

Have you got the expected answer?

Regards,
Allen Chen
Microsoft Online Support
--------------------
| From: "TS" <[email protected]>
| References: <[email protected]>
<[email protected]>
| 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: <#[email protected]>
| 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
| > (e-mail address removed).
| >
| >
| > 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:
| > (e-mail address removed).
| >
| > ==================================================
| > 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" <[email protected]>
| > | 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: <[email protected]>
| > | 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~!
| > |
| > |
| > |
| >
|
|
|
 
Ad

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. After that, you can post your question and our members will help you out.

Ask a Question

Top