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

asp.net building controls : viewstate and the IStateManager interface


Rowland Shaw
1/25/2005 8:25:06 AM
All the documentation I've found suggects that all you need to support on
your object to stick it in the ViewState on a control is the IStateManager
interface.

However, with the IStateManager interface implemented (in my example on
ComplexObject), I get the infamous error:
[HttpException (0x80004005): The type 'MyCompany.MyProject.ComplexObject'
must be marked as Serializable or have a TypeConverter other than
ReferenceConverter to be put in viewstate.]

There's been a lot of head scratching, and a lot of flicking through pages
245 to 255 of MS Press' "Developing Asp.Net Server Controls and Components";
but I'm still no wiser -- am I missing something blindingly obvious or is
Teemu Keiski
1/26/2005 11:10:40 PM
Hi,

IStateManager means that object itself implements a interface similar to
controls which have state management capability, means objects themselves
save something (their current state) to view state (IStateMamager declares
the inetrface for these saving/loading/tracking methods), but object
instances itself are not put into the view state.

E.g state and instances are kept separately (instances are recreated on
postback and view state is then loaded to them to restore the state).
IStateManager is meant to obejcts which aren't controls but work in the same
context for example control styles, ListItems and so on.

If you put object instances to ViewState, their implementation of
IStateManager has nothing to do with this process but as error message
indicates, in that case objects must have Serializable attribute applied to
the class for automatic serialization and you can further customize this
process by implementing ISerializable interface.

--
Teemu Keiski
ASP.NET MVP, AspInsider
Finland, EU


[quoted text, click to view]

Teemu Keiski
1/26/2005 11:13:43 PM
And to add, yes option to having Serializable attribute is developing a
TypeConverter for your object, it is the most efficient solution from
viewstate standpoint. The key point in understanding what I said is
explained on pages 245-246

--
Teemu Keiski
ASP.NET MVP, AspInsider
Finland, EU


[quoted text, click to view]

Rowland Shaw
1/27/2005 12:39:03 AM
Thanks for taking the time to reply -- I think I'm a bit cleaer now.

If/when I get a chance, I'll have to sit down and write an article on how to
do this and explain it in terms I'd understand for the next time I (or anyone
else) comes across this...


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