Other than because session storage is session-global to more than one page, why would you ever want to use the viewstate to hold values?
It seems kind of ridiculous to send any kind of information other than a few small query string like values, back and forth from the client to server. I mean what a waste of bandwidth(!), simply for storage purposes. The session, while global across multiple pages, seems like a completely superior alternative to the viewstate.
Especially with asp.net ajax controls and variants, the viewstate could quickly become bloated tracking the various states and variables of all those different controls and html elements.
But then why is there viewstate storage for page variables and objects at all?
Maybe I'm missing another great usage for the page's viewstate storage, does anyone know something out there?
Thanks for reading!
EDIT: Everyone had a great answer, sorry if I didn't pick yours.
Not really a direct answer to your question, but it may resolve your issue.
You can store viewstate server side, eliminating the payload for the client.
Create a class the inherits page, and override the PageStatePersister. http://msdn.microsoft.com/en-us/library/system.web.ui.sessionpagestatepersister.aspx
ViewState is essentially just a hidden input that must be uploaded to the server and parsed with each request. This field is typically populated automatically, often with the programmer blissfully unaware, and can grow quite large. For many sites that presents a problem, because even broadband users have very limited upstream bandwidth.
On intranet sites where all the users have high-speed LAN access to the server but the ram available for holding session data is limited, it may make more sense.