Совместное использование переменных между действиями в asp.net MVC - PullRequest
3 голосов
/ 28 января 2012

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

У меня есть форма поиска и кнопка - при нажатии открывается таблица, полная данныхсогласно параметрам формы поиска.Одно действие - все хорошо и чисто.

Теперь меня попросили поставить кнопку Excel, чтобы пользователь мог загрузить таблицу в формате Excel.Я не хочу снова запускать запрос базы данных, поскольку данные уже есть, но, поскольку я использую компонент Excel на стороне сервера, мне нужно, чтобы данные были доступны на сервере, чтобы перенести их в Excel.

Моя первоначальная идея заключалась в том, чтобы в контроллере была дополнительная переменная, в которой можно было бы хранить данные.Но я никогда не видел, чтобы это делалось в asp.net MVC.Это принятый образец?Насколько я понимаю, каждое действие является чем-то изолированным.

Ответы [ 3 ]

2 голосов
/ 28 января 2012

Шаблон MVC поощряет безгражданство.Это означает, что если вы хотите хранить данные между действиями, которые ему необходимы для публикации от клиента (сервер не должен поддерживать состояние, относящееся к определенному сеансу).(поэтому да, каждое действие должно быть изолированным и не должно зависеть от какого-либо предыдущего действия, то есть оно не должно полагаться на настройку из предыдущего запроса)

Прочитайте блог Скотта Гу о том, что означает MVCздесь http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx

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

2 голосов
/ 28 января 2012

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

1 голос
/ 28 января 2012

Я бы предложил использовать TempData, например, это описано здесь http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications

Обновление: вернуть файл, как здесь сделано Возвращение файла для просмотра / загрузки в ASP.NET MVC

Это нормальная практика иметь отдельный контроллер для возврата файла.

...