Если у меня есть простой фрагмент данных для хранения (например, целое число или строка), я могу сохранить его в ViewState или с помощью элемента управления HiddenField.
Почему я должен предпочесть одно другому?
ViewState
Скрытое поле
Есть ли другие плюсы и минусы?
Да, я мог бы сохранить в сеансе, однако в этом сценарии данные актуальны только для соответствующей страницы, поэтому по причинам инкапсуляции я бы предпочел хранить их на странице.
Сохранение данных в сеансе по существу сделало бы его глобальным по масштабу. Хранение его на странице уменьшит его объем, что является лучшей практикой дизайна.
Согласитесь, если это актуально только для страницы. Я бы выбрал ViewState, в основном по причине, о которой говорится в dant.





Не совсем, ViewState фактически хранится в скрытом поле, поэтому единственная реальная разница - это кодировка.
Если вам не нужно манипулировать значением с помощью JavaScript или вы надеетесь полностью отключить ViewState на этой странице, я бы использовал ViewState. В основном потому, что есть сторонние инструменты (как этот), которые понимают ViewState и не понимают ваше настраиваемое скрытое поле.
По умолчанию он хранится в скрытом поле, однако вы можете изменить это и сохранить ViewState в сеансе.
ViewState хранится на самой странице, поэтому он увеличивает размер страницы и может вызвать проблемы с производительностью.
Также мы можем настроить приложение на сохранить состояние просмотра на сервере, а не на саму страницу, что может защитить от некоторых проблем безопасности.
Джомит
Я не уверен, что аргумент размера страницы здесь действителен - размер страницы будет увеличиваться независимо от того, сохраню ли я свое значение в ViewState или добавлю на страницу дополнительный элемент управления и сохраню там значение
Согласитесь с Ричардом Э. относительно аргумента размера страницы; с другой стороны, согласитесь с Jomit относительно возможности хранить состояние просмотра на сервере.
С точки зрения ремонтопригодности я бы использовал ViewState. Вам нужно писать меньше кода, что сводится к меньшему количеству точек отказа в вашем программном обеспечении. Это также означает, что разработчикам, которые придут после вас, будет легче поддерживать ваше решение.
Если вам это не совсем удобно, напишите на странице средство доступа к свойству, которое действует как фасад для извлечения значения из ViewState. Позже, если вы почувствуете необходимость преобразовать его в скрытое поле, метод доступа сможет без труда обработать этот переключатель для остальной части кода. Просто убедитесь, что вы задокументировали причины этого.
Viewstate работает только на той странице, на которой вы находитесь или на которой отправляете сообщения. Со скрытым полем вы можете получить доступ к данным на следующей странице, к которой вы переходите (а также к другим данным), используя метод PreviousPage объекта Page следующим образом:
string term = ((TextBox)Page.PreviousPage.FindControl("txtSearchTerm")).Text;
Скрытые поля невидимы на странице, и их значения можно просмотреть в источнике представления, но значение состояния представления закодировано и не читается.
Значение скрытого поля размещено на следующей странице. (Примечание: используйте server.transfer, чтобы получить значение скрытых полей).
Вы также можете хранить данные в объекте Session