Где и какие данные сохранить в сеансе приложения ASP.NET MVC 2? - PullRequest
1 голос
/ 20 февраля 2010

У меня возникли проблемы с сохранением состояния моего текущего представления.

В настоящее время у меня есть несколько списков выбора, вызывающих свой собственный метод Action на контроллере, который возвращает представление Index с отфильтрованной моделью на основе значений списка выбора.

Я также написал небольшое действие FileResult, которое создает CSV-файл на основе текущей модели. Но сейчас я рассматриваю только один список выбора, так как я только сохраняю значение selectList1 в сеансе и получаю к нему доступ с помощью Session["SelectListValue1"]

  • Каковы лучшие практики в этой ситуации?
  • Должен ли я повторить всю (каждое действие для каждого SelectList) часть?
  • Должен ли я сохранять каждое значение SelectLists в сеансе и проверять, является ли оно нулевым?
  • Или я должен просто сохранить Lambda Expression в сеансе и изменять его при каждом вызове?

Ответы [ 2 ]

1 голос
/ 21 февраля 2010

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

Каждая форма должна следовать шаблону POST-Request-GET, где это возможно, поэтому вы не собираетесь делать то, что вы делали в WebForms, как правило (где вы продолжаете отправлять обратно в ту же форму / действие).

Итак, вы должны рассмотреть, какое состояние вы пытаетесь захватить. Список возможных значений - это одна вещь, взятая, возможно, из базы данных и сохраняемая в виде списка или, возможно, перечисляемая в кеше (в некоторых сценариях; может искать его каждый раз в других). Выбранное значение, вероятно, представляет свойство другого объекта osme, поэтому вы должны использовать его как средство для получения выбранного значения.

Если это что-то, что не является частью постоянного объекта, то вы можете либо просто прочитать значения записи каждый раз и снова установить состояние просмотра (вероятно, лучший метод), либо, если вам нужно сохранить это значение при перенаправлении, затем используйте сумку TempData (которая работает так же, как сессия; фактически использует сессию под капотом), но значения собирают мусор после одного следующего запроса, так что вам не нужно слишком беспокоиться о раздувании памяти.

0 голосов
/ 20 февраля 2010

Не похоже, что вам вообще нужно использовать сессию. Не можете ли вы передать значения ваших списков выбора через строку запроса или в форме?

...