I need to grab the base64-encoded representation of the ViewState. Obviously this would not be available until fairly late in the request lifecycle, which is OK.

For example, if the output of the page includes:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJODU0Njc5MD...==" />

I need a way on the server side to get the value "/wEPDwUJODU0Njc5MD...=="

To clarify, I need this value when the page is being rendered, not on PostBack. e.g. I need to know the ViewState value that is being sent to the client, not the ViewState I'm getting back from them.

+2  A: 

Rex, I suspect a good place to start looking is solutions that compress the ViewState -- they're grabbing ViewState on the server before it's sent down to the client and gzipping it. That's exactly where you want to be.

Jeff Atwood

See this blog post where the author describes a method for overriding the default behavior for generating the ViewState and instead shows how to save it on the server Session object.

In ASP.NET 2.0, ViewState is saved by a descendant of PageStatePersister class. This class is an abstract class for saving and loading ViewsState and there are two implemented descendants of this class in .Net Framework, named HiddenFieldPageStatePersister and SessionPageStatePersister. By default HiddenFieldPageStatePersister is used to save/load ViewState information, but we can easily get the SessionPageStatePersister to work and save ViewState in Session object.

Although I did not test his code, it seems to show exactly what you want: a way to gain access to ViewState code while still on the server, before postback.

Yaakov Ellis

I enabled compression following similar articles to those posted above. The key to accessing the ViewState before the application sends it was overriding this method;

protected override void SavePageStateToPersistenceMedium(object viewState)

You can call the base method within this override and then add whatever additional logic you require to handle the ViewState.

Dave Anderson