Что лучше использовать ViewState или hiddenfield

У меня есть страница, на которой я хочу сохранить значение объекта между постами. Я думаю о двух способах сохранения ценности объектов

  1. Сохраните значение в View Sate
  2. Сохранить значение в скрытом поле

какой вариант лучше всего использовать в зависимости от производительности


person Vijjendra    schedule 22.10.2009    source источник


Ответы (4)


Viewstate, если вам не нужно ссылаться на него в скрипте на стороне клиента. Скрытое поле, если вы это сделаете.

Также учтите, что если данные являются конфиденциальными, Viewstate по умолчанию зашифровано, тогда как скрытое поле по умолчанию сохраняет его как обычный текст, видимый любому, кто знает, как просматривать исходный код.

Изменить

Согласно примечанию @Andrew Hare к его собственному ответу, я редактирую это. Это достаточно важное различие, которое следует отметить. Я бы не хотел, чтобы кто-то думал, что они были «безопасны» с использованием Viewstate из-за моего надзора.

Состояние просмотра НЕ зашифровано по умолчанию, оно хранится в кодировке Base-64. Его можно довольно легко декодировать, поэтому использование Viewstate, поскольку оно зашифровано по умолчанию, недопустимо. Это лучше, чем обычный текст, но не для тех, у кого есть возможность погуглить «расшифровать Viewstate» или «декодировать Viewstate».

Так что не полагайтесь на Viewstate для защиты вашей скрытой информации в коде на стороне клиента.

В статье здесь рассказывается, как правильно его зашифровать. (но также предупреждает о проблемах с производительностью).

person David    schedule 22.10.2009

На самом деле это не имеет значения, так как сам ViewState хранится в скрытом вводе. Используйте тот, который вам проще. Если бы это зависело от меня, я бы выбрал ViewState, поскольку среда выполнения ASP.NET будет обрабатывать сериализацию и десериализацию ваших объектов за вас.

person Andrew Hare    schedule 22.10.2009
comment
Я не уверен, что согласен... Viewstate зашифровано, а скрытое поле по умолчанию - нет. Если только я что-то не упустил. Обычно я доверяю вашим ответам, так что могу поспорить, что что-то упускаю. - person David; 22.10.2009
comment
Нет, вы делаете хорошее замечание - ViewState может быть зашифрован (но не всегда - по умолчанию он просто закодирован в base-64). Хорошо поймал! :) - person Andrew Hare; 22.10.2009
comment
Спасибо! Вы правы насчет base-64, конечно. Это важное различие. Я редактирую свой ответ, чтобы отразить это. - person David; 22.10.2009

Мне нравится ViewState - его намного сложнее взломать - неприятный человек может легко отправить вам вашу страницу с неверными данными в ваших скрытых полях.

person Ray    schedule 22.10.2009

Вы хотите сохранить его в состоянии просмотра. Скрытые поля можно обновлять в браузере, поскольку они предназначены для хранения информации, которой можно манипулировать на стороне клиента. Состояние просмотра будет проверено asp.net на предмет подделки, где вам придется сделать это со скрытым полем самостоятельно.

person kemiller2002    schedule 22.10.2009