Исключения не "просто случаются" время от времени. Они всегда происходят по уважительным причинам, некоторые из которых уже перечислены в других ответах.
Однако, чтобы облегчить проблемы с ViewState, рассмотрите возможность его полного отключения. Как разработчики ASP.NET мы часто склонны использовать ViewState во всех местах, где он не нужен, потому что он используется по умолчанию. Я обычно думаю об использовании статического HTML, прежде чем рассмотреть возможность использования элемента управления. Если вы решили использовать элемент управления, подумайте, действительно ли ему нужно включить ViewState. Отключение этого часто приводит к лучшему времени загрузки страницы, поэтому, если вы можете, сделайте это.
Я бы хотел, чтобы он был отключен по умолчанию, чтобы люди были вынуждены так думать, но это не так.
Обновление для ответа на комментарий:
В верхней части головы у меня есть 3 возможности отключить ViewState.
Отключить ViewState, если данные загружаются при каждой обратной передаче. Это часто бывает, если вы создаете сайты с поддержкой AJAX (это real AJAX, а не UpdatePanel;)), где вы обычно загружаете данные при первой загрузке, а затем перезагружаете / обновляете данные с использованием запросов AJAX. , В некоторых случаях вы можете даже загружать данные при каждом посещении с единственной целью отключить ViewState, а затем вместо этого кэшировать данные на сервере.
Вы также можете отключить ViewState, если вы привязываете данные к содержимому, которое действительно статично. Иногда я нахожу список, который привязан к небольшой статической таблице basedata в базе данных или что-то в этом роде. Теперь, это может быть опасно, но если я убежден, что данные не изменятся, я мог бы переместить данные на страницу в виде статического содержимого (вы можете поместить его в отдельный элемент управления, чтобы у вас не было нескольких статических копий данных ). Но если данные затем изменятся, вам придется изменить их вручную.
Простые элементы управления, такие как Labels, часто являются хорошими кандидатами для отключения ViewState.
Наконец, вы можете переключиться на ASP.NET MVC framework и навсегда распрощаться с этими проблемами, это то, что я планирую сделать, даже если у меня возникнут другие проблемы. ;)