Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > ASP .Net Web Controls > WebControl & Viewstate

Reply
Thread Tools

WebControl & Viewstate

 
 
Chris
Guest
Posts: n/a
 
      01-23-2004
I'm trying to create a WebControl that creates additional WebControls at runtime and persists their data across the PostBack.

The basic idea is this:

public class WebControl1: System.Web.UI.WebControls.WebControl
{
// Member Variables, Properties, etc...

protected override void Render(HtmlTextWriter output)
{
RadioButton myRadioButton = new RadioButton();
myRadioButton.ID = "RadioButton1";
myRadioButton.GroupName = "RadioButtonGroup1";
Page.Controls.Add(myRadioButton);
myRadioButton.RenderControl(output);
}
}

When this control is used on a page such as:

<tag:webcontrol id="WebControl1" runat="server"></tag:webcontrol>

..... everything loads up nicely (i.e. a RadioButton is rendered to the page). Obviously, because the control (myRadioButton) is created each time the class is loaded and the HTML output is rendered, if the RadioButton is toggled (checked), it will not retain its state.

Rather than go into all of the things I've *tried* to do to get this RadioButton to persist its Checked property across PostBack's, I'll just pose my question directly which is what do I need to add to this (very simple) code to get that RadioButton to persist its state across PostBack's?

Obviously, at some point I need to *save* the value the user sets it to and at some point I need to check that value and restore it when the control is re-created on PostBack but where? Override some methods (SaveViewState/LoadViewState)? Implement an Interface (IPostBackDataHandler, etc...)?

Much thanks in advance -

- Chris

 
Reply With Quote
 
 
 
 
Victor Garcia Aprea [MVP]
Guest
Posts: n/a
 
      01-23-2004
Hi Chris,

The radiobutton is not saving its state because it is being created too
late; at Render lots of important key events have already fired (Init,
viewstate loading, etc) and your control was not there yet to be called by
the fx to update its state/etc. Please take a look at the Control Execution
Lifecycle to learn more about how it will affect dynamically created
controls. Here[1] you will find a link to the docs and some insights I've
written about the topic.

[1] http://weblogs.asp.net/vga/archive/2.../11/23498.aspx

--
Victor Garcia Aprea
Microsoft MVP | ASP.NET
Looking for insights on ASP.NET? Read my blog:
http://obies.com/vga/blog.aspx
To contact me remove 'NOSPAM'. Please post all questions to the newsgroup

"Chris" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> I'm trying to create a WebControl that creates additional WebControls at

runtime and persists their data across the PostBack.
>
> The basic idea is this:
>
> public class WebControl1: System.Web.UI.WebControls.WebControl
> {
> // Member Variables, Properties, etc...
>
> protected override void Render(HtmlTextWriter output)
> {
> RadioButton myRadioButton = new RadioButton();
> myRadioButton.ID = "RadioButton1";
> myRadioButton.GroupName = "RadioButtonGroup1";
> Page.Controls.Add(myRadioButton);
> myRadioButton.RenderControl(output);
> }
> }
>
> When this control is used on a page such as:
>
> <tag:webcontrol id="WebControl1" runat="server"></tag:webcontrol>
>
> ... everything loads up nicely (i.e. a RadioButton is rendered to the

page). Obviously, because the control (myRadioButton) is created each time
the class is loaded and the HTML output is rendered, if the RadioButton is
toggled (checked), it will not retain its state.
>
> Rather than go into all of the things I've *tried* to do to get this

RadioButton to persist its Checked property across PostBack's, I'll just
pose my question directly which is what do I need to add to this (very
simple) code to get that RadioButton to persist its state across PostBack's?
>
> Obviously, at some point I need to *save* the value the user sets it to

and at some point I need to check that value and restore it when the control
is re-created on PostBack but where? Override some methods
(SaveViewState/LoadViewState)? Implement an Interface (IPostBackDataHandler,
etc...)?
>
> Much thanks in advance -
>
> - Chris
>



 
Reply With Quote
 
 
 
 
CMA
Guest
Posts: n/a
 
      01-23-2004
r u creating the control in page load event???
if so, u r creating it again and again. u can make sure it with a break
point. if so, create it withing this code.

if(!IsPostBack)
{
// create control here
}

in this way, u r creating the control only once. it will remain the state by
default.

if u r not creating the controll every time, my guess is wrong.

hope this helps.
regards,
CMA




"Chris" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> I'm trying to create a WebControl that creates additional WebControls at

runtime and persists their data across the PostBack.
>
> The basic idea is this:
>
> public class WebControl1: System.Web.UI.WebControls.WebControl
> {
> // Member Variables, Properties, etc...
>
> protected override void Render(HtmlTextWriter output)
> {
> RadioButton myRadioButton = new RadioButton();
> myRadioButton.ID = "RadioButton1";
> myRadioButton.GroupName = "RadioButtonGroup1";
> Page.Controls.Add(myRadioButton);
> myRadioButton.RenderControl(output);
> }
> }
>
> When this control is used on a page such as:
>
> <tag:webcontrol id="WebControl1" runat="server"></tag:webcontrol>
>
> ... everything loads up nicely (i.e. a RadioButton is rendered to the

page). Obviously, because the control (myRadioButton) is created each time
the class is loaded and the HTML output is rendered, if the RadioButton is
toggled (checked), it will not retain its state.
>
> Rather than go into all of the things I've *tried* to do to get this

RadioButton to persist its Checked property across PostBack's, I'll just
pose my question directly which is what do I need to add to this (very
simple) code to get that RadioButton to persist its state across PostBack's?
>
> Obviously, at some point I need to *save* the value the user sets it to

and at some point I need to check that value and restore it when the control
is re-created on PostBack but where? Override some methods
(SaveViewState/LoadViewState)? Implement an Interface (IPostBackDataHandler,
etc...)?
>
> Much thanks in advance -
>
> - Chris
>



 
Reply With Quote
 
Chris
Guest
Posts: n/a
 
      01-23-2004
Thank you!!! I've got it working now.

I can't believe all this time I should have just been creating these things in Page_Load()... Doh! There are so many methods, events, interfaces, etc... it all starts to mash together!

- Chris
 
Reply With Quote
 
Victor Garcia Aprea [MVP]
Guest
Posts: n/a
 
      01-23-2004
Glad I could help

--
Victor Garcia Aprea
Microsoft MVP | ASP.NET
Looking for insights on ASP.NET? Read my blog:
http://obies.com/vga/blog.aspx

To contact me remove 'NOSPAM'. Please post all questions to the newsgroup

"Chris" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> Thank you!!! I've got it working now.
>
> I can't believe all this time I should have just been creating these

things in Page_Load()... Doh! There are so many methods, events, interfaces,
etc... it all starts to mash together!
>
> - Chris



 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Custom webcontrol that references another webcontrol Fabricio ASP .Net Building Controls 0 09-21-2005 02:55 AM
Trapping an Exception ocurring in a Webcontrol at the Page or parent WebControl level. ASP .Net 2 01-31-2005 06:34 PM
WebControl inside of WebControl and attaching events Kasabaarde Sumta ASP .Net Building Controls 0 12-13-2004 09:51 PM
WebControl with non-WebControl property Peter Morris [Air Software Ltd] ASP .Net Web Controls 1 12-07-2004 12:25 PM
Can a webcontrol (webcontrol.dll) have a configuration file? Luis Ramírez. ASP .Net Building Controls 2 07-06-2004 04:35 PM



Advertisments