Discussion:
Dynamic WebControl events...
Mike Andrews
2007-02-14 15:51:11 UTC
Permalink
Guys,

I'm having problems getting an aspx page to process an event for a control,
namely a checkbox, that was dynamically created and added to the form.
Any suggestions?

Thanks,
Mike

Here's a sample of the code:

protected void Page_Load(object sender, EventArgs e) {

CheckBox cb = new CheckBox();
cb.ID = "test";
cb.Text = "Click Here!";
cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
this.Form.Controls.Add(cb);

}

void cb_CheckedChanged(object sender, EventArgs e) {
//Do something here
}

===================================
This list is hosted by DevelopMentor® http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com
Stacey Levine
2007-02-14 15:54:10 UTC
Permalink
Paul van Brenk
2007-02-14 15:53:53 UTC
Permalink
Efran Cobisi
2007-02-14 15:59:51 UTC
Permalink
This is incorrect.
Control's life cycle begins after they have been added to their parent
controls; so, even if you add a Control to another Controls collection
in the Page PreRender event, it will still fire its postback events...
As Stacey pointed out, setting the AutoPostback property to true will
solve this problem.

HTH,

Efran Cobisi
http://www.cobisi.com

Paul van Brenk wrote:
> You should create the checkbox in the Init event... on the postback the
> checkbox is created after the events are handled (ie. Too late).
>
> Paul
>
> -----Original Message-----
> From: Discussion of building .NET applications targeted for the Web
> [mailto:DOTNET-***@DISCUSS.DEVELOP.COM] On Behalf Of Mike Andrews
> Sent: Wednesday, February 14, 2007 16:51
> To: DOTNET-***@DISCUSS.DEVELOP.COM
> Subject: [DOTNET-WEB] Dynamic WebControl events...
>
> Guys,
>
> I'm having problems getting an aspx page to process an event for a
> control,
> namely a checkbox, that was dynamically created and added to the form.
> Any suggestions?
>
> Thanks,
> Mike
>
> Here's a sample of the code:
>
> protected void Page_Load(object sender, EventArgs e) {
>
> CheckBox cb = new CheckBox();
> cb.ID = "test";
> cb.Text = "Click Here!";
> cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
> this.Form.Controls.Add(cb);
>
> }
>
> void cb_CheckedChanged(object sender, EventArgs e) {
> //Do something here
> }
>
> ===================================
> This list is hosted by DevelopMentor(r) http://www.develop.com
>
> View archives and manage your subscription(s) at
> http://discuss.develop.com
>
> ===================================
> This list is hosted by DevelopMentor® http://www.develop.com
>
> View archives and manage your subscription(s) at http://discuss.develop.com
>

===================================
This list is hosted by DevelopMentor® http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com
Ryan Heath
2007-02-14 16:38:42 UTC
Permalink
To backup Paul, if you add a control in the PreRender event, you will
not receive its events at postback.

Simply because, at postback, the time the control events are raised,
the methods that will handle the control events are not bounded yet,
since you would have bound the method at the PreRender event ...

protected void Page_PreRender(object sender, EventArgs e)
{
CheckBox cb = new CheckBox();
cb.ID = "test";
cb.Text = "Click Here!";
cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
this.Form.Controls.Add(cb);
}

void cb_CheckedChanged(object sender, EventArgs e)
{
//is never called!
}

The order of page events are, partially,
- init
- load
- change evts
- click evts
- prerender

Normally, creating and binding a control is ok with in the load event,
but the Checkbox, in particular, needs to be created even before the
load event...

// Ryan

On 2/14/07, Efran Cobisi <***@qbgroup.it> wrote:
> This is incorrect.
> Control's life cycle begins after they have been added to their parent
> controls; so, even if you add a Control to another Controls collection
> in the Page PreRender event, it will still fire its postback events...
> As Stacey pointed out, setting the AutoPostback property to true will
> solve this problem.
>
> HTH,
>
> Efran Cobisi
> http://www.cobisi.com
>
> Paul van Brenk wrote:
> > You should create the checkbox in the Init event... on the postback the
> > checkbox is created after the events are handled (ie. Too late).
> >
> > Paul
> >
> > -----Original Message-----
> > From: Discussion of building .NET applications targeted for the Web
> > [mailto:DOTNET-***@DISCUSS.DEVELOP.COM] On Behalf Of Mike Andrews
> > Sent: Wednesday, February 14, 2007 16:51
> > To: DOTNET-***@DISCUSS.DEVELOP.COM
> > Subject: [DOTNET-WEB] Dynamic WebControl events...
> >
> > Guys,
> >
> > I'm having problems getting an aspx page to process an event for a
> > control,
> > namely a checkbox, that was dynamically created and added to the form.
> > Any suggestions?
> >
> > Thanks,
> > Mike
> >
> > Here's a sample of the code:
> >
> > protected void Page_Load(object sender, EventArgs e) {
> >
> > CheckBox cb = new CheckBox();
> > cb.ID = "test";
> > cb.Text = "Click Here!";
> > cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
> > this.Form.Controls.Add(cb);
> >
> > }
> >
> > void cb_CheckedChanged(object sender, EventArgs e) {
> > //Do something here
> > }
> >
> > ===================================
> > This list is hosted by DevelopMentor(r) http://www.develop.com
> >
> > View archives and manage your subscription(s) at
> > http://discuss.develop.com
> >
> > ===================================
> > This list is hosted by DevelopMentor(r) http://www.develop.com
> >
> > View archives and manage your subscription(s) at http://discuss.develop.com
> >
>
> ===================================
> This list is hosted by DevelopMentor(r) http://www.develop.com
>
> View archives and manage your subscription(s) at http://discuss.develop.com
>

===================================
This list is hosted by DevelopMentor® http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com
Mark Brackett
2007-02-14 16:38:11 UTC
Permalink
Efran Cobisi
2007-02-14 16:52:26 UTC
Permalink
I'm sorry, you are right.
I confused page's lifecycle with control's one...

Efran Cobisi
http://www.cobisi.com

Mark Brackett wrote:
> I believe that the "catching up" of the lifecycle is for the *control's*
> lifecycle - not the Page. Since it is the Page lifecycle that populates
> viewstate and the IPostBackHandler data, missing the Page lifecycle does
> not get those actions done. However, all of the control lifecycle events
> (Init, Load, etc.) would be fired.
>
> As a confirmation of this, I moved the checkbox creation to
> Page_PreRender, and it does *not* maintain viewstate or trigger the
> event handler - both of which would have already passed in the Page
> lifecycle.
>
> --MB
>
> -----Original Message-----
> From: Discussion of building .NET applications targeted for the Web
> [mailto:DOTNET-***@DISCUSS.DEVELOP.COM] On Behalf Of Efran Cobisi
> Sent: Wednesday, February 14, 2007 11:00 AM
> To: DOTNET-***@DISCUSS.DEVELOP.COM
> Subject: Re: [DOTNET-WEB] Dynamic WebControl events...
>
> This is incorrect.
> Control's life cycle begins after they have been added to their parent
> controls; so, even if you add a Control to another Controls collection
> in the Page PreRender event, it will still fire its postback events...
> As Stacey pointed out, setting the AutoPostback property to true will
> solve this problem.
>
> HTH,
>
> Efran Cobisi
> http://www.cobisi.com
>
> Paul van Brenk wrote:
>
>> You should create the checkbox in the Init event... on the postback
>>
> the
>
>> checkbox is created after the events are handled (ie. Too late).
>>
>> Paul
>>
>> -----Original Message-----
>> From: Discussion of building .NET applications targeted for the Web
>> [mailto:DOTNET-***@DISCUSS.DEVELOP.COM] On Behalf Of Mike Andrews
>> Sent: Wednesday, February 14, 2007 16:51
>> To: DOTNET-***@DISCUSS.DEVELOP.COM
>> Subject: [DOTNET-WEB] Dynamic WebControl events...
>>
>> Guys,
>>
>> I'm having problems getting an aspx page to process an event for a
>> control,
>> namely a checkbox, that was dynamically created and added to the form.
>> Any suggestions?
>>
>> Thanks,
>> Mike
>>
>> Here's a sample of the code:
>>
>> protected void Page_Load(object sender, EventArgs e) {
>>
>> CheckBox cb = new CheckBox();
>> cb.ID = "test";
>> cb.Text = "Click Here!";
>> cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
>> this.Form.Controls.Add(cb);
>>
>> }
>>
>> void cb_CheckedChanged(object sender, EventArgs e) {
>> //Do something here
>> }
>>
>> ===================================
>> This list is hosted by DevelopMentor(r) http://www.develop.com
>>
>> View archives and manage your subscription(s) at
>> http://discuss.develop.com
>>
>> ===================================
>> This list is hosted by DevelopMentor(r) http://www.develop.com
>>
>> View archives and manage your subscription(s) at
>>
> http://discuss.develop.com
>
>
> ===================================
> This list is hosted by DevelopMentor(r) http://www.develop.com
>
> View archives and manage your subscription(s) at
> http://discuss.develop.com
>
> ===================================
> This list is hosted by DevelopMentor® http://www.develop.com
>
> View archives and manage your subscription(s) at http://discuss.develop.com
>

===================================
This list is hosted by DevelopMentor® http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com
Mark Brackett
2007-02-14 17:34:43 UTC
Permalink
Mike Andrews
2007-02-14 18:05:41 UTC
Permalink
Hey guys...
Thank you so much for the responses...
However, after some further research into this problem here's what's going
on. Perhaps one of you know what the issue could be. We are using a
repeater (actually 3 nested repeaters) to dynamically build some forms.
I've been able to deduce these things with dynamic check boxes contained
within repeaters:

1) When you check a checkbox, all previously checked checkboxes fire their
CheckedChanged event.
2) When you uncheck a checkbox, all previously checked checkboxes fire
their CheckedChanged event and the one unchecked does not fire the
CheckedChanged event.

Any assistance would be most appreciated.

Thanks,
Mike

Here's the markup code for the sample page:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test2.aspx.cs"
Inherits="Test2" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="scriptManater"
runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="pnlUpdate" runat="server">
<ContentTemplate>
<asp:Repeater ID="rpt1" runat="server"
EnableViewState="false">
<ItemTemplate>
<asp:PlaceHolder ID="ph1"
runat="server"></asp:PlaceHolder>
</ItemTemplate>
</asp:Repeater>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>
</html>

Here's the codebehind for the sample page:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;

public partial class Test2 : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {

List<System.Web.UI.Control> controls = new List<Control>();

CheckBox cb = null;
cb = new CheckBox();
cb.ID = "test";
cb.Text = "Click Here!";
cb.AutoPostBack = true;
cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
controls.Add(cb);

cb = new CheckBox();
cb.ID = "test2";
cb.Text = "Click Here Again!";
cb.AutoPostBack = true;
cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
controls.Add(cb);

rpt1.ItemCreated += new RepeaterItemEventHandler(rpt1_ItemCreated);
rpt1.DataSource = controls;
rpt1.DataBind();

}

void rpt1_ItemCreated(object sender, RepeaterItemEventArgs e) {
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==
ListItemType.AlternatingItem) {
PlaceHolder ph = (PlaceHolder)e.Item.FindControl("ph1");
CheckBox cb = (CheckBox)e.Item.DataItem;
ph.Controls.Add(cb);
}
}

void cb_CheckedChanged(object sender, EventArgs e) {

}
}



On 2/14/07, Mark Brackett <***@ufl.edu> wrote:
>
> I agree with most of this, but not about the Checkbox needing to be
> "created even before the load event".
>
> The Page class (at least in ASP.NET 2.0) actually attempts to load post
> data TWICE (presumably for issues such as this). The first time is after
> the InitComplete event, but before PreLoad (trace shows this as
> Begin/End ProcessPostData). The second time is after the Load event,
> which loads any post data that couldn't be loaded on the first pass
> (trace shows this as Begin/End ProcessPostData Second Try"). After the
> SECOND run is when the IPostBackDataHandler.RaisePostChangedEvent gets
> called (aka CheckedChanged for the Checkbox) (trace show this as
> Begin/End RaiseChangedEvents).
>
> A quick test also proves this, as I get the CheckedChanged event with a
> Checkbox created in Page_Load.
>
> Of course, the safest and easiest route is to create dynamic controls in
> PreInit to make sure you catch all aspects of the Page lifecycle.
> Unfortunately, this won't work out for the OP's code because he's using
> the Page.Form property (not a control reference) which doesn't get
> populated until AFTER PreInit. So, in that case, Init is the earliest it
> can be added (but it'd probably be easiest to just change it to
> reference the form control, so this.form1.Controls.Add).
>
> --MB
>
> -----Original Message-----
> From: Discussion of building .NET applications targeted for the Web
> [mailto:DOTNET-***@DISCUSS.DEVELOP.COM] On Behalf Of Ryan Heath
> Sent: Wednesday, February 14, 2007 11:39 AM
> To: DOTNET-***@DISCUSS.DEVELOP.COM
> Subject: Re: [DOTNET-WEB] Dynamic WebControl events...
>
> To backup Paul, if you add a control in the PreRender event, you will
> not receive its events at postback.
>
> Simply because, at postback, the time the control events are raised,
> the methods that will handle the control events are not bounded yet,
> since you would have bound the method at the PreRender event ...
>
> protected void Page_PreRender(object sender, EventArgs e)
> {
> CheckBox cb = new CheckBox();
> cb.ID = "test";
> cb.Text = "Click Here!";
> cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
> this.Form.Controls.Add(cb);
> }
>
> void cb_CheckedChanged(object sender, EventArgs e)
> {
> //is never called!
> }
>
> The order of page events are, partially,
> - init
> - load
> - change evts
> - click evts
> - prerender
>
> Normally, creating and binding a control is ok with in the load event,
> but the Checkbox, in particular, needs to be created even before the
> load event...
>
> // Ryan
>
> On 2/14/07, Efran Cobisi <***@qbgroup.it> wrote:
> > This is incorrect.
> > Control's life cycle begins after they have been added to their parent
> > controls; so, even if you add a Control to another Controls collection
> > in the Page PreRender event, it will still fire its postback events...
> > As Stacey pointed out, setting the AutoPostback property to true will
> > solve this problem.
> >
> > HTH,
> >
> > Efran Cobisi
> > http://www.cobisi.com
> >
> > Paul van Brenk wrote:
> > > You should create the checkbox in the Init event... on the postback
> the
> > > checkbox is created after the events are handled (ie. Too late).
> > >
> > > Paul
> > >
> > > -----Original Message-----
> > > From: Discussion of building .NET applications targeted for the Web
> > > [mailto:DOTNET-***@DISCUSS.DEVELOP.COM] On Behalf Of Mike Andrews
> > > Sent: Wednesday, February 14, 2007 16:51
> > > To: DOTNET-***@DISCUSS.DEVELOP.COM
> > > Subject: [DOTNET-WEB] Dynamic WebControl events...
> > >
> > > Guys,
> > >
> > > I'm having problems getting an aspx page to process an event for a
> > > control,
> > > namely a checkbox, that was dynamically created and added to the
> form.
> > > Any suggestions?
> > >
> > > Thanks,
> > > Mike
> > >
> > > Here's a sample of the code:
> > >
> > > protected void Page_Load(object sender, EventArgs e) {
> > >
> > > CheckBox cb = new CheckBox();
> > > cb.ID = "test";
> > > cb.Text = "Click Here!";
> > > cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
> > > this.Form.Controls.Add(cb);
> > >
> > > }
> > >
> > > void cb_CheckedChanged(object sender, EventArgs e) {
> > > //Do something here
> > > }
> > >
> > > ===================================
> > > This list is hosted by DevelopMentor(r) http://www.develop.com
> > >
> > > View archives and manage your subscription(s) at
> > > http://discuss.develop.com
> > >
> > > ===================================
> > > This list is hosted by DevelopMentor(r) http://www.develop.com
> > >
> > > View archives and manage your subscription(s) at
> http://discuss.develop.com
> > >
> >
> > ===================================
> > This list is hosted by DevelopMentor(r) http://www.develop.com
> >
> > View archives and manage your subscription(s) at
> http://discuss.develop.com
> >
>
> ===================================
> This list is hosted by DevelopMentor(r) http://www.develop.com
>
> View archives and manage your subscription(s) at
> http://discuss.develop.com
>
> ===================================
> This list is hosted by DevelopMentor(r) http://www.develop.com
>
> View archives and manage your subscription(s) at
> http://discuss.develop.com
>

===================================
This list is hosted by DevelopMentor® http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com
Mark Brackett
2007-02-14 20:49:12 UTC
Permalink
Mike Andrews
2007-02-14 21:06:35 UTC
Permalink
We have an UpdatePanel and that contains the Repeater.
It's becoming a real problem for this page we need to make.


On 2/14/07, Mark Brackett <***@ufl.edu> wrote:
>
> Perhaps try without the UpdatePanel? I don't see anything that jumps out
> at me as being a problem with normal ASP.NET...but, I haven't really
> worked with Atlas.
>
> --MB
>
> -----Original Message-----
> From: Discussion of building .NET applications targeted for the Web
> [mailto:DOTNET-***@DISCUSS.DEVELOP.COM] On Behalf Of Mike Andrews
> Sent: Wednesday, February 14, 2007 1:06 PM
> To: DOTNET-***@DISCUSS.DEVELOP.COM
> Subject: Re: [DOTNET-WEB] Dynamic WebControl events...
>
> Hey guys...
> Thank you so much for the responses...
> However, after some further research into this problem here's what's
> going
> on. Perhaps one of you know what the issue could be. We are using a
> repeater (actually 3 nested repeaters) to dynamically build some forms.
> I've been able to deduce these things with dynamic check boxes contained
> within repeaters:
>
> 1) When you check a checkbox, all previously checked checkboxes fire
> their
> CheckedChanged event.
> 2) When you uncheck a checkbox, all previously checked checkboxes fire
> their CheckedChanged event and the one unchecked does not fire the
> CheckedChanged event.
>
> Any assistance would be most appreciated.
>
> Thanks,
> Mike
>
> Here's the markup code for the sample page:
>
> <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test2.aspx.cs"
> Inherits="Test2" %>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
> http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> <html xmlns="http://www.w3.org/1999/xhtml" >
> <head runat="server">
> <title>Untitled Page</title>
> </head>
> <body>
> <form id="form1" runat="server">
> <div>
> <asp:ScriptManager ID="scriptManater"
> runat="server"></asp:ScriptManager>
> <asp:UpdatePanel ID="pnlUpdate" runat="server">
> <ContentTemplate>
> <asp:Repeater ID="rpt1" runat="server"
> EnableViewState="false">
> <ItemTemplate>
> <asp:PlaceHolder ID="ph1"
> runat="server"></asp:PlaceHolder>
> </ItemTemplate>
> </asp:Repeater>
> </ContentTemplate>
> </asp:UpdatePanel>
> </div>
> </form>
> </body>
> </html>
>
> Here's the codebehind for the sample page:
>
> using System;
> using System.Data;
> using System.Configuration;
> using System.Collections;
> using System.Web;
> using System.Web.Security;
> using System.Web.UI;
> using System.Web.UI.WebControls;
> using System.Web.UI.WebControls.WebParts;
> using System.Web.UI.HtmlControls;
> using System.Collections.Generic;
>
> public partial class Test2 : System.Web.UI.Page {
> protected void Page_Load(object sender, EventArgs e) {
>
> List<System.Web.UI.Control> controls = new List<Control>();
>
> CheckBox cb = null;
> cb = new CheckBox();
> cb.ID = "test";
> cb.Text = "Click Here!";
> cb.AutoPostBack = true;
> cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
> controls.Add(cb);
>
> cb = new CheckBox();
> cb.ID = "test2";
> cb.Text = "Click Here Again!";
> cb.AutoPostBack = true;
> cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
> controls.Add(cb);
>
> rpt1.ItemCreated += new
> RepeaterItemEventHandler(rpt1_ItemCreated);
> rpt1.DataSource = controls;
> rpt1.DataBind();
>
> }
>
> void rpt1_ItemCreated(object sender, RepeaterItemEventArgs e) {
> if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==
> ListItemType.AlternatingItem) {
> PlaceHolder ph = (PlaceHolder)e.Item.FindControl("ph1");
> CheckBox cb = (CheckBox)e.Item.DataItem;
> ph.Controls.Add(cb);
> }
> }
>
> void cb_CheckedChanged(object sender, EventArgs e) {
>
> }
> }
>
>
>
> On 2/14/07, Mark Brackett <***@ufl.edu> wrote:
> >
> > I agree with most of this, but not about the Checkbox needing to be
> > "created even before the load event".
> >
> > The Page class (at least in ASP.NET 2.0) actually attempts to load
> post
> > data TWICE (presumably for issues such as this). The first time is
> after
> > the InitComplete event, but before PreLoad (trace shows this as
> > Begin/End ProcessPostData). The second time is after the Load event,
> > which loads any post data that couldn't be loaded on the first pass
> > (trace shows this as Begin/End ProcessPostData Second Try"). After the
> > SECOND run is when the IPostBackDataHandler.RaisePostChangedEvent gets
> > called (aka CheckedChanged for the Checkbox) (trace show this as
> > Begin/End RaiseChangedEvents).
> >
> > A quick test also proves this, as I get the CheckedChanged event with
> a
> > Checkbox created in Page_Load.
> >
> > Of course, the safest and easiest route is to create dynamic controls
> in
> > PreInit to make sure you catch all aspects of the Page lifecycle.
> > Unfortunately, this won't work out for the OP's code because he's
> using
> > the Page.Form property (not a control reference) which doesn't get
> > populated until AFTER PreInit. So, in that case, Init is the earliest
> it
> > can be added (but it'd probably be easiest to just change it to
> > reference the form control, so this.form1.Controls.Add).
> >
> > --MB
> >
> > -----Original Message-----
> > From: Discussion of building .NET applications targeted for the Web
> > [mailto:DOTNET-***@DISCUSS.DEVELOP.COM] On Behalf Of Ryan Heath
> > Sent: Wednesday, February 14, 2007 11:39 AM
> > To: DOTNET-***@DISCUSS.DEVELOP.COM
> > Subject: Re: [DOTNET-WEB] Dynamic WebControl events...
> >
> > To backup Paul, if you add a control in the PreRender event, you will
> > not receive its events at postback.
> >
> > Simply because, at postback, the time the control events are raised,
> > the methods that will handle the control events are not bounded yet,
> > since you would have bound the method at the PreRender event ...
> >
> > protected void Page_PreRender(object sender, EventArgs e)
> > {
> > CheckBox cb = new CheckBox();
> > cb.ID = "test";
> > cb.Text = "Click Here!";
> > cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
> > this.Form.Controls.Add(cb);
> > }
> >
> > void cb_CheckedChanged(object sender, EventArgs e)
> > {
> > //is never called!
> > }
> >
> > The order of page events are, partially,
> > - init
> > - load
> > - change evts
> > - click evts
> > - prerender
> >
> > Normally, creating and binding a control is ok with in the load event,
> > but the Checkbox, in particular, needs to be created even before the
> > load event...
> >
> > // Ryan
> >
> > On 2/14/07, Efran Cobisi <***@qbgroup.it> wrote:
> > > This is incorrect.
> > > Control's life cycle begins after they have been added to their
> parent
> > > controls; so, even if you add a Control to another Controls
> collection
> > > in the Page PreRender event, it will still fire its postback
> events...
> > > As Stacey pointed out, setting the AutoPostback property to true
> will
> > > solve this problem.
> > >
> > > HTH,
> > >
> > > Efran Cobisi
> > > http://www.cobisi.com
> > >
> > > Paul van Brenk wrote:
> > > > You should create the checkbox in the Init event... on the
> postback
> > the
> > > > checkbox is created after the events are handled (ie. Too late).
> > > >
> > > > Paul
> > > >
> > > > -----Original Message-----
> > > > From: Discussion of building .NET applications targeted for the
> Web
> > > > [mailto:DOTNET-***@DISCUSS.DEVELOP.COM] On Behalf Of Mike Andrews
> > > > Sent: Wednesday, February 14, 2007 16:51
> > > > To: DOTNET-***@DISCUSS.DEVELOP.COM
> > > > Subject: [DOTNET-WEB] Dynamic WebControl events...
> > > >
> > > > Guys,
> > > >
> > > > I'm having problems getting an aspx page to process an event for a
> > > > control,
> > > > namely a checkbox, that was dynamically created and added to the
> > form.
> > > > Any suggestions?
> > > >
> > > > Thanks,
> > > > Mike
> > > >
> > > > Here's a sample of the code:
> > > >
> > > > protected void Page_Load(object sender, EventArgs e) {
> > > >
> > > > CheckBox cb = new CheckBox();
> > > > cb.ID = "test";
> > > > cb.Text = "Click Here!";
> > > > cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
> > > > this.Form.Controls.Add(cb);
> > > >
> > > > }
> > > >
> > > > void cb_CheckedChanged(object sender, EventArgs e) {
> > > > //Do something here
> > > > }
> > > >
> > > > ===================================
> > > > This list is hosted by DevelopMentor(r) http://www.develop.com
> > > >
> > > > View archives and manage your subscription(s) at
> > > > http://discuss.develop.com
> > > >
> > > > ===================================
> > > > This list is hosted by DevelopMentor(r) http://www.develop.com
> > > >
> > > > View archives and manage your subscription(s) at
> > http://discuss.develop.com
> > > >
> > >
> > > ===================================
> > > This list is hosted by DevelopMentor(r) http://www.develop.com
> > >
> > > View archives and manage your subscription(s) at
> > http://discuss.develop.com
> > >
> >
> > ===================================
> > This list is hosted by DevelopMentor(r) http://www.develop.com
> >
> > View archives and manage your subscription(s) at
> > http://discuss.develop.com
> >
> > ===================================
> > This list is hosted by DevelopMentor(r) http://www.develop.com
> >
> > View archives and manage your subscription(s) at
> > http://discuss.develop.com
> >
>
> ===================================
> This list is hosted by DevelopMentor(r) http://www.develop.com
>
> View archives and manage your subscription(s) at
> http://discuss.develop.com
>
> ===================================
> This list is hosted by DevelopMentor(r) http://www.develop.com
>
> View archives and manage your subscription(s) at
> http://discuss.develop.com
>

===================================
This list is hosted by DevelopMentor® http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com
Efran Cobisi
2007-02-15 08:37:24 UTC
Permalink
Mike, I got it.
This is not an UpdatePanel issue (at least your code is not showing it),
you can leave it there. Here are the steps you should follow to make
this page works:

1) On the markup (.aspx page) set the Repeater rpt1 EnableViewState
property to true. This one will retain the state between postbacks and
will let you catch change events correctly.
2) Move the initialization code from the Page Load event to the Page
*Init* event (you can just rename the Page_Load method to Page_Init,
since you are using the AutoEventWireup feature...). This will let you
initialize the controls *before* the they have their state loaded, so
the state would eventually update the original initialization on each
postback.
3) Since you are using an UpdatePanel you should limit the interaction
with the page to the controls inside the panel itself. So, if you want
to give a feedback upon checkboxes changes you should place a control,
say a Label, inside the UpdatePanel. Inside the cb_CheckedChanged method
just set the Label text to something useful. For example:

void cb_CheckedChanged(object sender, EventArgs e)
{
label1.Text += String.Format("{0} state changed.<br />" +
((Control)sender).ID);
}

HTH,

Efran Cobisi
http://www.cobisi.com

Mike Andrews wrote:
> We have an UpdatePanel and that contains the Repeater.
> It's becoming a real problem for this page we need to make.
>
>
> On 2/14/07, Mark Brackett <***@ufl.edu> wrote:
>>
>> Perhaps try without the UpdatePanel? I don't see anything that jumps out
>> at me as being a problem with normal ASP.NET...but, I haven't really
>> worked with Atlas.
>>
>> --MB
>>
>> -----Original Message-----
>> From: Discussion of building .NET applications targeted for the Web
>> [mailto:DOTNET-***@DISCUSS.DEVELOP.COM] On Behalf Of Mike Andrews
>> Sent: Wednesday, February 14, 2007 1:06 PM
>> To: DOTNET-***@DISCUSS.DEVELOP.COM
>> Subject: Re: [DOTNET-WEB] Dynamic WebControl events...
>>
>> Hey guys...
>> Thank you so much for the responses...
>> However, after some further research into this problem here's what's
>> going
>> on. Perhaps one of you know what the issue could be. We are using a
>> repeater (actually 3 nested repeaters) to dynamically build some forms.
>> I've been able to deduce these things with dynamic check boxes contained
>> within repeaters:
>>
>> 1) When you check a checkbox, all previously checked checkboxes fire
>> their
>> CheckedChanged event.
>> 2) When you uncheck a checkbox, all previously checked checkboxes fire
>> their CheckedChanged event and the one unchecked does not fire the
>> CheckedChanged event.
>>
>> Any assistance would be most appreciated.
>>
>> Thanks,
>> Mike
>>
>> Here's the markup code for the sample page:
>>
>> <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test2.aspx.cs"
>> Inherits="Test2" %>
>> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
>> http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
>> <html xmlns="http://www.w3.org/1999/xhtml" >
>> <head runat="server">
>> <title>Untitled Page</title>
>> </head>
>> <body>
>> <form id="form1" runat="server">
>> <div>
>> <asp:ScriptManager ID="scriptManater"
>> runat="server"></asp:ScriptManager>
>> <asp:UpdatePanel ID="pnlUpdate" runat="server">
>> <ContentTemplate>
>> <asp:Repeater ID="rpt1" runat="server"
>> EnableViewState="false">
>> <ItemTemplate>
>> <asp:PlaceHolder ID="ph1"
>> runat="server"></asp:PlaceHolder>
>> </ItemTemplate>
>> </asp:Repeater>
>> </ContentTemplate>
>> </asp:UpdatePanel>
>> </div>
>> </form>
>> </body>
>> </html>
>>
>> Here's the codebehind for the sample page:
>>
>> using System;
>> using System.Data;
>> using System.Configuration;
>> using System.Collections;
>> using System.Web;
>> using System.Web.Security;
>> using System.Web.UI;
>> using System.Web.UI.WebControls;
>> using System.Web.UI.WebControls.WebParts;
>> using System.Web.UI.HtmlControls;
>> using System.Collections.Generic;
>>
>> public partial class Test2 : System.Web.UI.Page {
>> protected void Page_Load(object sender, EventArgs e) {
>>
>> List<System.Web.UI.Control> controls = new List<Control>();
>>
>> CheckBox cb = null;
>> cb = new CheckBox();
>> cb.ID = "test";
>> cb.Text = "Click Here!";
>> cb.AutoPostBack = true;
>> cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
>> controls.Add(cb);
>>
>> cb = new CheckBox();
>> cb.ID = "test2";
>> cb.Text = "Click Here Again!";
>> cb.AutoPostBack = true;
>> cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
>> controls.Add(cb);
>>
>> rpt1.ItemCreated += new
>> RepeaterItemEventHandler(rpt1_ItemCreated);
>> rpt1.DataSource = controls;
>> rpt1.DataBind();
>>
>> }
>>
>> void rpt1_ItemCreated(object sender, RepeaterItemEventArgs e) {
>> if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==
>> ListItemType.AlternatingItem) {
>> PlaceHolder ph = (PlaceHolder)e.Item.FindControl("ph1");
>> CheckBox cb = (CheckBox)e.Item.DataItem;
>> ph.Controls.Add(cb);
>> }
>> }
>>
>> void cb_CheckedChanged(object sender, EventArgs e) {
>>
>> }
>> }
>>
>>
>>
>> On 2/14/07, Mark Brackett <***@ufl.edu> wrote:
>> >
>> > I agree with most of this, but not about the Checkbox needing to be
>> > "created even before the load event".
>> >
>> > The Page class (at least in ASP.NET 2.0) actually attempts to load
>> post
>> > data TWICE (presumably for issues such as this). The first time is
>> after
>> > the InitComplete event, but before PreLoad (trace shows this as
>> > Begin/End ProcessPostData). The second time is after the Load event,
>> > which loads any post data that couldn't be loaded on the first pass
>> > (trace shows this as Begin/End ProcessPostData Second Try"). After the
>> > SECOND run is when the IPostBackDataHandler.RaisePostChangedEvent gets
>> > called (aka CheckedChanged for the Checkbox) (trace show this as
>> > Begin/End RaiseChangedEvents).
>> >
>> > A quick test also proves this, as I get the CheckedChanged event with
>> a
>> > Checkbox created in Page_Load.
>> >
>> > Of course, the safest and easiest route is to create dynamic controls
>> in
>> > PreInit to make sure you catch all aspects of the Page lifecycle.
>> > Unfortunately, this won't work out for the OP's code because he's
>> using
>> > the Page.Form property (not a control reference) which doesn't get
>> > populated until AFTER PreInit. So, in that case, Init is the earliest
>> it
>> > can be added (but it'd probably be easiest to just change it to
>> > reference the form control, so this.form1.Controls.Add).
>> >
>> > --MB
>> >
>> > -----Original Message-----
>> > From: Discussion of building .NET applications targeted for the Web
>> > [mailto:DOTNET-***@DISCUSS.DEVELOP.COM] On Behalf Of Ryan Heath
>> > Sent: Wednesday, February 14, 2007 11:39 AM
>> > To: DOTNET-***@DISCUSS.DEVELOP.COM
>> > Subject: Re: [DOTNET-WEB] Dynamic WebControl events...
>> >
>> > To backup Paul, if you add a control in the PreRender event, you will
>> > not receive its events at postback.
>> >
>> > Simply because, at postback, the time the control events are raised,
>> > the methods that will handle the control events are not bounded yet,
>> > since you would have bound the method at the PreRender event ...
>> >
>> > protected void Page_PreRender(object sender, EventArgs e)
>> > {
>> > CheckBox cb = new CheckBox();
>> > cb.ID = "test";
>> > cb.Text = "Click Here!";
>> > cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
>> > this.Form.Controls.Add(cb);
>> > }
>> >
>> > void cb_CheckedChanged(object sender, EventArgs e)
>> > {
>> > //is never called!
>> > }
>> >
>> > The order of page events are, partially,
>> > - init
>> > - load
>> > - change evts
>> > - click evts
>> > - prerender
>> >
>> > Normally, creating and binding a control is ok with in the load event,
>> > but the Checkbox, in particular, needs to be created even before the
>> > load event...
>> >
>> > // Ryan
>> >
>> > On 2/14/07, Efran Cobisi <***@qbgroup.it> wrote:
>> > > This is incorrect.
>> > > Control's life cycle begins after they have been added to their
>> parent
>> > > controls; so, even if you add a Control to another Controls
>> collection
>> > > in the Page PreRender event, it will still fire its postback
>> events...
>> > > As Stacey pointed out, setting the AutoPostback property to true
>> will
>> > > solve this problem.
>> > >
>> > > HTH,
>> > >
>> > > Efran Cobisi
>> > > http://www.cobisi.com
>> > >
>> > > Paul van Brenk wrote:
>> > > > You should create the checkbox in the Init event... on the
>> postback
>> > the
>> > > > checkbox is created after the events are handled (ie. Too late).
>> > > >
>> > > > Paul
>> > > >
>> > > > -----Original Message-----
>> > > > From: Discussion of building .NET applications targeted for the
>> Web
>> > > > [mailto:DOTNET-***@DISCUSS.DEVELOP.COM] On Behalf Of Mike Andrews
>> > > > Sent: Wednesday, February 14, 2007 16:51
>> > > > To: DOTNET-***@DISCUSS.DEVELOP.COM
>> > > > Subject: [DOTNET-WEB] Dynamic WebControl events...
>> > > >
>> > > > Guys,
>> > > >
>> > > > I'm having problems getting an aspx page to process an event for a
>> > > > control,
>> > > > namely a checkbox, that was dynamically created and added to the
>> > form.
>> > > > Any suggestions?
>> > > >
>> > > > Thanks,
>> > > > Mike
>> > > >
>> > > > Here's a sample of the code:
>> > > >
>> > > > protected void Page_Load(object sender, EventArgs e) {
>> > > >
>> > > > CheckBox cb = new CheckBox();
>> > > > cb.ID = "test";
>> > > > cb.Text = "Click Here!";
>> > > > cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
>> > > > this.Form.Controls.Add(cb);
>> > > >
>> > > > }
>> > > >
>> > > > void cb_CheckedChanged(object sender, EventArgs e) {
>> > > > //Do something here
>> > > > }
>> > > >
>> > > > ===================================
>> > > > This list is hosted by DevelopMentor(r) http://www.develop.com
>> > > >
>> > > > View archives and manage your subscription(s) at
>> > > > http://discuss.develop.com
>> > > >
>> > > > ===================================
>> > > > This list is hosted by DevelopMentor(r) http://www.develop.com
>> > > >
>> > > > View archives and manage your subscription(s) at
>> > http://discuss.develop.com
>> > > >
>> > >
>> > > ===================================
>> > > This list is hosted by DevelopMentor(r) http://www.develop.com
>> > >
>> > > View archives and manage your subscription(s) at
>> > http://discuss.develop.com
>> > >
>> >
>> > ===================================
>> > This list is hosted by DevelopMentor(r) http://www.develop.com
>> >
>> > View archives and manage your subscription(s) at
>> > http://discuss.develop.com
>> >
>> > ===================================
>> > This list is hosted by DevelopMentor(r) http://www.develop.com
>> >
>> > View archives and manage your subscription(s) at
>> > http://discuss.develop.com
>> >
>>
>> ===================================
>> This list is hosted by DevelopMentor(r) http://www.develop.com
>>
>> View archives and manage your subscription(s) at
>> http://discuss.develop.com
>>
>> ===================================
>> This list is hosted by DevelopMentor(r) http://www.develop.com
>>
>> View archives and manage your subscription(s) at
>> http://discuss.develop.com
>>
>
> ===================================
> This list is hosted by DevelopMentor® http://www.develop.com
>
> View archives and manage your subscription(s) at
> http://discuss.develop.com

===================================
This list is hosted by DevelopMentor® http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com
Mike Andrews
2007-02-15 14:29:55 UTC
Permalink
WOW!

I'm impressed. I admit I was quite skeptical this morning when I tried out
your solution, but low and behold it worked!
I spent all day yesterday fiddling with this thing!

Thanks a lot. That works quite well.

Mike


On 2/15/07, Efran Cobisi <***@qbgroup.it> wrote:
>
> Mike, I got it.
> This is not an UpdatePanel issue (at least your code is not showing it),
> you can leave it there. Here are the steps you should follow to make
> this page works:
>
> 1) On the markup (.aspx page) set the Repeater rpt1 EnableViewState
> property to true. This one will retain the state between postbacks and
> will let you catch change events correctly.
> 2) Move the initialization code from the Page Load event to the Page
> *Init* event (you can just rename the Page_Load method to Page_Init,
> since you are using the AutoEventWireup feature...). This will let you
> initialize the controls *before* the they have their state loaded, so
> the state would eventually update the original initialization on each
> postback.
> 3) Since you are using an UpdatePanel you should limit the interaction
> with the page to the controls inside the panel itself. So, if you want
> to give a feedback upon checkboxes changes you should place a control,
> say a Label, inside the UpdatePanel. Inside the cb_CheckedChanged method
> just set the Label text to something useful. For example:
>
> void cb_CheckedChanged(object sender, EventArgs e)
> {
> label1.Text += String.Format("{0} state changed.<br />" +
> ((Control)sender).ID);
> }
>
> HTH,
>
> Efran Cobisi
> http://www.cobisi.com
>
> Mike Andrews wrote:
> > We have an UpdatePanel and that contains the Repeater.
> > It's becoming a real problem for this page we need to make.
> >
> >
> > On 2/14/07, Mark Brackett <***@ufl.edu> wrote:
> >>
> >> Perhaps try without the UpdatePanel? I don't see anything that jumps
> out
> >> at me as being a problem with normal ASP.NET...but, I haven't really
> >> worked with Atlas.
> >>
> >> --MB
> >>
> >> -----Original Message-----
> >> From: Discussion of building .NET applications targeted for the Web
> >> [mailto:DOTNET-***@DISCUSS.DEVELOP.COM] On Behalf Of Mike Andrews
> >> Sent: Wednesday, February 14, 2007 1:06 PM
> >> To: DOTNET-***@DISCUSS.DEVELOP.COM
> >> Subject: Re: [DOTNET-WEB] Dynamic WebControl events...
> >>
> >> Hey guys...
> >> Thank you so much for the responses...
> >> However, after some further research into this problem here's what's
> >> going
> >> on. Perhaps one of you know what the issue could be. We are using a
> >> repeater (actually 3 nested repeaters) to dynamically build some forms.
> >> I've been able to deduce these things with dynamic check boxes
> contained
> >> within repeaters:
> >>
> >> 1) When you check a checkbox, all previously checked checkboxes fire
> >> their
> >> CheckedChanged event.
> >> 2) When you uncheck a checkbox, all previously checked checkboxes fire
> >> their CheckedChanged event and the one unchecked does not fire the
> >> CheckedChanged event.
> >>
> >> Any assistance would be most appreciated.
> >>
> >> Thanks,
> >> Mike
> >>
> >> Here's the markup code for the sample page:
> >>
> >> <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test2.aspx.cs"
> >> Inherits="Test2" %>
> >> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
> >> http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> >> <html xmlns="http://www.w3.org/1999/xhtml" >
> >> <head runat="server">
> >> <title>Untitled Page</title>
> >> </head>
> >> <body>
> >> <form id="form1" runat="server">
> >> <div>
> >> <asp:ScriptManager ID="scriptManater"
> >> runat="server"></asp:ScriptManager>
> >> <asp:UpdatePanel ID="pnlUpdate" runat="server">
> >> <ContentTemplate>
> >> <asp:Repeater ID="rpt1" runat="server"
> >> EnableViewState="false">
> >> <ItemTemplate>
> >> <asp:PlaceHolder ID="ph1"
> >> runat="server"></asp:PlaceHolder>
> >> </ItemTemplate>
> >> </asp:Repeater>
> >> </ContentTemplate>
> >> </asp:UpdatePanel>
> >> </div>
> >> </form>
> >> </body>
> >> </html>
> >>
> >> Here's the codebehind for the sample page:
> >>
> >> using System;
> >> using System.Data;
> >> using System.Configuration;
> >> using System.Collections;
> >> using System.Web;
> >> using System.Web.Security;
> >> using System.Web.UI;
> >> using System.Web.UI.WebControls;
> >> using System.Web.UI.WebControls.WebParts;
> >> using System.Web.UI.HtmlControls;
> >> using System.Collections.Generic;
> >>
> >> public partial class Test2 : System.Web.UI.Page {
> >> protected void Page_Load(object sender, EventArgs e) {
> >>
> >> List<System.Web.UI.Control> controls = new List<Control>();
> >>
> >> CheckBox cb = null;
> >> cb = new CheckBox();
> >> cb.ID = "test";
> >> cb.Text = "Click Here!";
> >> cb.AutoPostBack = true;
> >> cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
> >> controls.Add(cb);
> >>
> >> cb = new CheckBox();
> >> cb.ID = "test2";
> >> cb.Text = "Click Here Again!";
> >> cb.AutoPostBack = true;
> >> cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
> >> controls.Add(cb);
> >>
> >> rpt1.ItemCreated += new
> >> RepeaterItemEventHandler(rpt1_ItemCreated);
> >> rpt1.DataSource = controls;
> >> rpt1.DataBind();
> >>
> >> }
> >>
> >> void rpt1_ItemCreated(object sender, RepeaterItemEventArgs e) {
> >> if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==
> >> ListItemType.AlternatingItem) {
> >> PlaceHolder ph = (PlaceHolder)e.Item.FindControl("ph1");
> >> CheckBox cb = (CheckBox)e.Item.DataItem;
> >> ph.Controls.Add(cb);
> >> }
> >> }
> >>
> >> void cb_CheckedChanged(object sender, EventArgs e) {
> >>
> >> }
> >> }
> >>
> >>
> >>
> >> On 2/14/07, Mark Brackett <***@ufl.edu> wrote:
> >> >
> >> > I agree with most of this, but not about the Checkbox needing to be
> >> > "created even before the load event".
> >> >
> >> > The Page class (at least in ASP.NET 2.0) actually attempts to load
> >> post
> >> > data TWICE (presumably for issues such as this). The first time is
> >> after
> >> > the InitComplete event, but before PreLoad (trace shows this as
> >> > Begin/End ProcessPostData). The second time is after the Load event,
> >> > which loads any post data that couldn't be loaded on the first pass
> >> > (trace shows this as Begin/End ProcessPostData Second Try"). After
> the
> >> > SECOND run is when the IPostBackDataHandler.RaisePostChangedEventgets
> >> > called (aka CheckedChanged for the Checkbox) (trace show this as
> >> > Begin/End RaiseChangedEvents).
> >> >
> >> > A quick test also proves this, as I get the CheckedChanged event with
> >> a
> >> > Checkbox created in Page_Load.
> >> >
> >> > Of course, the safest and easiest route is to create dynamic controls
> >> in
> >> > PreInit to make sure you catch all aspects of the Page lifecycle.
> >> > Unfortunately, this won't work out for the OP's code because he's
> >> using
> >> > the Page.Form property (not a control reference) which doesn't get
> >> > populated until AFTER PreInit. So, in that case, Init is the earliest
> >> it
> >> > can be added (but it'd probably be easiest to just change it to
> >> > reference the form control, so this.form1.Controls.Add).
> >> >
> >> > --MB
> >> >
> >> > -----Original Message-----
> >> > From: Discussion of building .NET applications targeted for the Web
> >> > [mailto:DOTNET-***@DISCUSS.DEVELOP.COM] On Behalf Of Ryan Heath
> >> > Sent: Wednesday, February 14, 2007 11:39 AM
> >> > To: DOTNET-***@DISCUSS.DEVELOP.COM
> >> > Subject: Re: [DOTNET-WEB] Dynamic WebControl events...
> >> >
> >> > To backup Paul, if you add a control in the PreRender event, you will
> >> > not receive its events at postback.
> >> >
> >> > Simply because, at postback, the time the control events are raised,
> >> > the methods that will handle the control events are not bounded yet,
> >> > since you would have bound the method at the PreRender event ...
> >> >
> >> > protected void Page_PreRender(object sender, EventArgs e)
> >> > {
> >> > CheckBox cb = new CheckBox();
> >> > cb.ID = "test";
> >> > cb.Text = "Click Here!";
> >> > cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
> >> > this.Form.Controls.Add(cb);
> >> > }
> >> >
> >> > void cb_CheckedChanged(object sender, EventArgs e)
> >> > {
> >> > //is never called!
> >> > }
> >> >
> >> > The order of page events are, partially,
> >> > - init
> >> > - load
> >> > - change evts
> >> > - click evts
> >> > - prerender
> >> >
> >> > Normally, creating and binding a control is ok with in the load
> event,
> >> > but the Checkbox, in particular, needs to be created even before the
> >> > load event...
> >> >
> >> > // Ryan
> >> >
> >> > On 2/14/07, Efran Cobisi <***@qbgroup.it> wrote:
> >> > > This is incorrect.
> >> > > Control's life cycle begins after they have been added to their
> >> parent
> >> > > controls; so, even if you add a Control to another Controls
> >> collection
> >> > > in the Page PreRender event, it will still fire its postback
> >> events...
> >> > > As Stacey pointed out, setting the AutoPostback property to true
> >> will
> >> > > solve this problem.
> >> > >
> >> > > HTH,
> >> > >
> >> > > Efran Cobisi
> >> > > http://www.cobisi.com
> >> > >
> >> > > Paul van Brenk wrote:
> >> > > > You should create the checkbox in the Init event... on the
> >> postback
> >> > the
> >> > > > checkbox is created after the events are handled (ie. Too late).
> >> > > >
> >> > > > Paul
> >> > > >
> >> > > > -----Original Message-----
> >> > > > From: Discussion of building .NET applications targeted for the
> >> Web
> >> > > > [mailto:DOTNET-***@DISCUSS.DEVELOP.COM] On Behalf Of Mike Andrews
> >> > > > Sent: Wednesday, February 14, 2007 16:51
> >> > > > To: DOTNET-***@DISCUSS.DEVELOP.COM
> >> > > > Subject: [DOTNET-WEB] Dynamic WebControl events...
> >> > > >
> >> > > > Guys,
> >> > > >
> >> > > > I'm having problems getting an aspx page to process an event for
> a
> >> > > > control,
> >> > > > namely a checkbox, that was dynamically created and added to the
> >> > form.
> >> > > > Any suggestions?
> >> > > >
> >> > > > Thanks,
> >> > > > Mike
> >> > > >
> >> > > > Here's a sample of the code:
> >> > > >
> >> > > > protected void Page_Load(object sender, EventArgs e) {
> >> > > >
> >> > > > CheckBox cb = new CheckBox();
> >> > > > cb.ID = "test";
> >> > > > cb.Text = "Click Here!";
> >> > > > cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
> >> > > > this.Form.Controls.Add(cb);
> >> > > >
> >> > > > }
> >> > > >
> >> > > > void cb_CheckedChanged(object sender, EventArgs e) {
> >> > > > //Do something here
> >> > > > }
> >> > > >
> >> > > > ===================================
> >> > > > This list is hosted by DevelopMentor(r) http://www.develop.com
> >> > > >
> >> > > > View archives and manage your subscription(s) at
> >> > > > http://discuss.develop.com
> >> > > >
> >> > > > ===================================
> >> > > > This list is hosted by DevelopMentor(r) http://www.develop.com
> >> > > >
> >> > > > View archives and manage your subscription(s) at
> >> > http://discuss.develop.com
> >> > > >
> >> > >
> >> > > ===================================
> >> > > This list is hosted by DevelopMentor(r) http://www.develop.com
> >> > >
> >> > > View archives and manage your subscription(s) at
> >> > http://discuss.develop.com
> >> > >
> >> >
> >> > ===================================
> >> > This list is hosted by DevelopMentor(r) http://www.develop.com
> >> >
> >> > View archives and manage your subscription(s) at
> >> > http://discuss.develop.com
> >> >
> >> > ===================================
> >> > This list is hosted by DevelopMentor(r) http://www.develop.com
> >> >
> >> > View archives and manage your subscription(s) at
> >> > http://discuss.develop.com
> >> >
> >>
> >> ===================================
> >> This list is hosted by DevelopMentor(r) http://www.develop.com
> >>
> >> View archives and manage your subscription(s) at
> >> http://discuss.develop.com
> >>
> >> ===================================
> >> This list is hosted by DevelopMentor(r) http://www.develop.com
> >>
> >> View archives and manage your subscription(s) at
> >> http://discuss.develop.com
> >>
> >
> > ===================================
> > This list is hosted by DevelopMentor� http://www.develop.com
> >
> > View archives and manage your subscription(s) at
> > http://discuss.develop.com
>
> ===================================
> This list is hosted by DevelopMentor� http://www.develop.com
>
> View archives and manage your subscriptio
Continue reading on narkive:
Search results for 'Dynamic WebControl events...' (Questions and Answers)
5
replies
can i get question answer of asp.net ?
started 2006-10-11 00:02:47 UTC
software
Loading...