Re: Dynamic WebControl events...
Mark Brackett <[email protected]>
| Newsgroups | gmane.comp.windows.devel.dotnet.web |
|---|---|
| Message-ID | <[email protected]> |
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:[email protected]] On Behalf Of Ryan Heath Sent: Wednesday, February 14, 2007 11:39 AM To: [email protected] 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 <[email protected]> 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:[email protected]] On Behalf Of Mike Andrews > > Sent: Wednesday, February 14, 2007 16:51 > > To: [email protected] > > 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® http://www.develop.com View archives and manage your subscription(s) at http://discuss.develop.com