Tuesday, February 10, 2009

Watch the ViewState While Debugging

In my previous post, I briefly showed how to use the ViewState to persist data. This post will overcome the difficulty we have in seeing what data is currently in the ViewState while debugging. The problem? ViewState is a StateBag, which, unlike Hashtable, does not have a default visualizer that makes its values easy for the debugger to look at. In fact, the actual keys and values don't appear to be contained within the StateBag object itself, which makes drilling through its data pointless. (I'm guessing that since the ViewState has per-user-control-per-instance values, it probably stores the real data in the ASP.NET "magic zone" where all the context loading and such takes place. The StateBag probably just provides access methods to wherever the data is really stored.)

So how can you get a quick-and-easy view of the current ViewState? Just add the following line to your Watch panel:
new System.Collections.Hashtable(ViewState)
The Hashtable constructor iterates through all of the key/value pairs of the StateBag and creates a Hashtable object out of it. Since Hashtable has a key/value pair visualizer in Visual Studio, you get a nice, clean table of keys and values.

7 comments:

  1. Great tip! I have been banging my head against this all day!

    ReplyDelete
  2. very helpful..thank you.

    ReplyDelete
  3. Fantastic, great tip!!!!!!!!!!!!

    ReplyDelete
  4. What is Watch panel? Sorry, im kinda new.

    ReplyDelete
  5. For Watch panel press Alt+Ctr+Q

    ReplyDelete