Альтернативы ViewState в ASP.NET Webforms - PullRequest
5 голосов
/ 17 сентября 2010

Есть ли другие альтернативы ViewState?Я много слышал, как Session, сохраняя состояние некоторых элементов управления страницы и разрушаясь в тот момент, когда пользователь покидает страницу.

Я знаю, что описываю сам ViewState, но я ищу какой-то шаблон или предложения, чтобы вообще избежать ViewState.

Пример того, как я его использую:где я храню содержимое моей сетки (список ViewModels) для ViewState.Это помогает узнать, какие записи являются грязными, какие были изменены, их индексы, выбранные в данный момент объекты и т. Д.

Ответы [ 4 ]

3 голосов
/ 17 сентября 2010

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

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

1 голос
/ 17 сентября 2010

Не думаю, что вы пытаетесь отойти от ViewState.

Если вы храните большой объем данных, вы столкнетесь с проблемами при его сохранении в другом месте.Сессия?это приведет к потере вашего потребления памяти, или, если его не будет в процессе, вы будете перемещать все это каждый раз при загрузке / записи сеанса (один раз на запрос).Конечно, вы можете попытаться ограничить проблему, освободив сохраненные данные как можно скорее / как TempData в asp.net MVC.

Вы можете минимизировать объем информации, который вам нужно сохранить, чтобы проверить наличие модифицированных записейвведя метку времени / или версию записи.Таким образом, вы можете просто проверить, была ли добавлена ​​новая версия, и показать пользователю и то, что он пытался сохранить, и то, что кто-то еще сохранил.

1 голос
/ 17 сентября 2010

Другой вариант - сжатие вашего ViewState.Он по-прежнему добавляет объем в оба конца, но в целом он минимален.

Если вы используете .Net 4, есть несколько полезных новых дополнений ViewState:

ASP.NET 4.0: больше контроля над управлением состоянием просмотра

0 голосов
/ 17 сентября 2010

У вас есть Session, и у вас есть Cache.

Сеанс для пользователя, Кэш является глобальным.

Вам действительно нужно хранить все это во ViewState?почему вы можете отправить (но вы очень расплывчаты в своем вопросе, поэтому я делаю несколько предположений здесь) получить все старые данные из БД, сравнить их с вашими новыми данными и обновить то, что изменилось?

...