viewstate and the IStateManager interface

R

Rowland Shaw

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
there really an amount of black magic required? (I suspect the former)
 
T

Teemu Keiski

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.
 
T

Teemu Keiski

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
 
R

Rowland Shaw

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...


Teemu Keiski said:
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


Rowland Shaw said:
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
there really an amount of black magic required? (I suspect the former)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,756
Messages
2,569,534
Members
45,007
Latest member
OrderFitnessKetoCapsules

Latest Threads

Top