Где хранить временные данные в приложении ASP.NET - PullRequest
1 голос
/ 05 января 2010

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

Так что мне нужно какое-то временное место, чтобы сохранить их изменения до того, как они будут введены. Сетки будут использовать AJAX / Javascript, чтобы не вызывать полное обновление страницы при редактировании данных

Я могу представить следующие варианты хранения временных данных

  1. Скрытые поля формы
  2. ViewState
  3. Сессия

Опция, которая мне менее всего удобна, это опция ViewState, так как я прочитал, что она постепенно прекращается в ASP.NET 4.0, и я не уверен, что вы можете получить доступ к ViewState из метода страницы AJAX.

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

Ответы [ 5 ]

4 голосов
/ 05 января 2010

ASP.Net 4.0 не выводит из строя ViewState (он довольно важен для работы веб-форм!), Он просто немного меняет работу ViewState по умолчанию. Вы можете прочитать об этом здесь .

Если вы хотите вручную отслеживать данные, тогда лучшим вариантом будет Сессия. Но ViewState предназначен для автоматического сохранения таких временных изменений.

3 голосов
/ 05 января 2010

ViewState не выводится из эксплуатации и никогда не будет.

Однако вы правы, что не можете получить к нему доступ в методе статической страницы.

Я рекомендую вам сохранить данные в сеансе.

1 голос
/ 05 января 2010

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

На стороне клиента вы должны использовать скрытые поля для хранения данных, потому что JavaScript не знает о сеансе / кэше, а запросы AJAX не обязательно имеют доступ к определенным веб-ресурсам. Вы можете попытаться получить доступ к этим ресурсам через HttpContext.Current в веб-запросе, но информация о странице будет недоступна при вызове веб-службы или вызове веб-службы PageMethods.

0 голосов
/ 19 июля 2013

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

Мой обычный процесс: - При загрузке страницы: привязать источник данных к сетке, сохранить источник данных в ViewState - На сетке подайте: + Обновить: получить ключ обновления, извлечь элемент данных в источнике данных и обновить его до последнего значения + Вставить: создать новый элемент данных в источнике данных + Удалить: пометить элемент данных удаляется с вашим пользовательским флагом Затем перепривязать сетку. - При сохранении страницы: возврат источника данных из ViewState и пакетная вставка / обновление / удаление его в базу данных с вашим флагом

0 голосов
/ 05 января 2010

Как уже было сказано, сохраняйте его в сеансе, но обязательно очищайте, когда вы закончите, и храните только то, что вам действительно нужно хранить, т. Е. Не просто сбрасывайте кучу вещей в сеансе, потому что это легко.

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

...