Groups | Blog | Home
all groups > asp.net building controls > april 2005 >

asp.net building controls : Setting the order of LoadViewState


lisa NO[at]SPAM starways.net
4/8/2005 12:43:33 PM
I have a server control. It has a Layout property, a Height property,
and a Width property. What happens in the Height and Width property
depends on the Layout.

Unfortunately, what seems to be happening is that when I run a page
that has my control in it, the Height and Width properties are
initialized from ViewState before the Layout property. As a result,
the Height and Width properties are assuming a Layout property of 0
(it's an enum property, and that's what you get when there's no value).

Is there a way that I can force my page to initialize the Layout
property first? I've tried moving it above them in the code, on the
chance that it's processing from the top down, but that didn't have any
effect.

Can anyone help?

Thanks,
Lisa
Steve Goodyear
4/8/2005 3:15:02 PM
Hi Lisa,

As a best practice you should re-consider the logic or timing when events
happen. During the LoadViewState phase you don't really want any logic to
occur because some properties might rely on others that load their ViewState
later. See if you can take the logic that relies on Layout and implement it
at the PreRender event instead.

Instead if you totally reject that idea, LoadViewState is dependent on the
order Controls are added to the Page control tree.

Cheers,
Steve Goodyear
Haacked
4/8/2005 3:21:12 PM
The ViewState doesn't guarantee the order that controls
are loaded and saved. Therefore, if the value of the
Layout property is dependent on the Height and Width, it
probably shouldn't be saved in the ViewState. You could
make it a property that is calculated when it is accessed.

If that is a problem for some reason, your best bet is to
have your server control override the LoadViewState()
method and load the values from the ViewState in the
correct order. That gives you total control.

Hope this helps.

Phil
http://haacked.com/

[quoted text, click to view]
AddThis Social Bookmark Button