Просмотр состояния, если вам не нужно ссылаться на него в сценарии на стороне клиента. Скрытое поле, если вы делаете.
Также учтите, что если данные являются конфиденциальными, ViewState по умолчанию шифруется, тогда как скрытое поле по умолчанию сохраняет его в виде обычного текста, видимого любому, кто знает, как просмотреть источник.
Редактировать
За @ Эндрю Хейр, записку о его собственном ответе, я редактирую это. Это достаточно важное различие, чтобы отметить. Я не хотел бы, чтобы кто-то думал, что он "в безопасности", используя Viewstate, основываясь на моем недосмотре.
Viewstate по умолчанию НЕ зашифровано, оно хранится в кодировке Base-64. Его можно легко декодировать, поэтому использование Viewstate, поскольку по умолчанию оно зашифровано, недопустимо. Это лучше, чем обычный текст, но не для тех, у кого есть возможность «расшифровать Viewstate» или «декодировать Viewstate».
Так что не полагайтесь на Viewstate для защиты вашей скрытой информации в коде на стороне клиента.
Статья здесь рассказывает, как правильно ее зашифровать. (но также предупреждает о проблемах производительности).