Что такое ViewState

Ответ

ViewState — это механизм в ASP.NET для сохранения состояния элементов управления между postback-ами. Он хранит данные в скрытом поле __VIEWSTATE на странице и автоматически восстанавливает их при обратной отправке формы.

Особенности:

  • Работает только для элементов управления серверной стороны (runat="server")
  • Данные сериализуются в base64
  • Включен по умолчанию, можно отключить на уровне страницы или контрола (EnableViewState="false")

Пример:

<input type="hidden" name="__VIEWSTATE" value="dDw3NDg2NT...==" />

Минусы:

  • Увеличивает размер страницы
  • Может содержать чувствительные данные (нужно шифровать)
  • Только для текущей страницы, не работает при переходах

Ответ 18+ 🔞

А, ViewState, блядь! Ну это ж классика, ёпта, как борщ со сметаной в ASP.NET! Слушай, сейчас разжую.

Представь себе: сидит у тебя на странице TextBox, кнопка какая-нибудь. Пользователь ввёл туда «Хуй с горы», нажал на кнопку — форма улетела на сервер, обработалась и вернулась. И что ты видишь? А текст-то в поле остался! «Хуй с горы» так и красуется! Волшебство, блядь? Нет, ебать, это ViewState работает!

Этот хитрожопый механизм берёт состояние всех твоих серверных контролов — что в них введено, какой выбран пункт в списке, раскрыт ли аккордеон — и пихает это всё в одну большую, ёбаную, скрытую строку. Прям в HTML страницы засовывает, в такой вот тег:

<input type="hidden" name="__VIEWSTATE" value="dDw3NDg2NT...==" />

Видишь эту абракадабру в value? Это всё твои данные, сжатые и закодированные в base64. При следующем постбэке сервер берёт эту хуйню, расшифровывает и говорит каждому контролу: «На, мудак, восстанавливайся, каким ты был до того, как пользователь свою дичь начал вводить».

Но не всё так гладко, ёпта!

Во-первых, эта падла раздувает страницу как корову перед отёлом. Особенно если у тебя грид с тысячей строк включён. Половина трафика уходит на пересылку этой ебалы туда-сюда.

Во-вторых, там может быть что угодно. ID, какие-то флаги. По умолчанию это не шифруется, а только кодируется. Любой хитрожопый мудила может посмотреть, что там внутри. Поэтому если хранишь что-то секретное — включай шифрование, ViewStateEncryptionMode.

В-третьих, живёт эта сука только на одной странице. Перешёл на другую — всё, пиши пропало. Это не сессия, блядь.

А главный лайфхак? Если не используешь — вырубай нахуй! Зачем тебе эта гиря на ногах? На уровне всей страницы в директории Page:

<%@ Page EnableViewState="false" %>

Или прямо у конкретного контрола, который не должен помнить своё состояние:

<asp:TextBox ID="TextBox1" runat="server" EnableViewState="false" />

Вот и вся философия. Удобная штука, но если с ней неаккуратно — получишь овердохуища лишнего трафика и подозрительную строку, в которой, если приглядеться, можно разглядеть «Хуй с горы».