2010-09-17 3 views
5

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

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

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

ответ

3

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

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

+0

Хотя это не похоже на альтернативу, вы можете увеличить производительность своего приложения, не изменяя всю архитектуру. – Zafer

+0

Я обязательно посмотрю на это. – Jonn

0

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

Сессия для каждого пользователя, кэш глобальный.

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

+0

Я чувствую себя более комфортно, когда состояние находится в моих представлениях ViewModels. (Я держу только то, что, по моему мнению, действительно необходимо для контроля, чтобы функционировать.) Все остальное воссоздается после обратной передачи. Не будет получать из БД, воссоздавая ViewModels, а затем делать сравнения в целом медленнее? – Jonn

1

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

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

ASP.NET 4.0: more control on viewstate management

+0

Tsk. Мы все еще разрабатываем большинство наших приложений на .Net 3.5. – Jonn

1

Я не думаю, что вы делаете дело отойти от ViewState.

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

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