2011-02-01 2 views
1

Привет,ASP.NET MVC2 Сохранить данные между действиями?

У меня есть вид, который содержит некоторые поля ввода, некоторые из этих полей регулярные входы файлов. При отправке этой формы просмотра файлы будут сохранены в папке temp. Но если есть проблема проверки, обнаруженная на стороне службы, то будет возвращено одно и то же представление (для обновления). Проблема в том, что входы файлов снова не будут заполнены (безопасность), и вместо этого я должен расширить класс просмотра и показать небольшую миниатюру сохраненных файлов, а также сделать возможным удалить (чтобы можно было загрузить другой файл вместо этого).

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

Моя собственная мысль один из следующих действий:

  1. Используйте скрытые поля, но это будет сложно, когда класс магазина является сложным, и это также не будет, что обеспечено.
  2. Использование сеанса для хранения данных, я не вижу, является ли это хорошим или плохим решением?
  3. Создайте класс singelton (например, кеш), где все эти данные будут сохранены временно. У ASP.NET был кеш, в котором вы могли установить время до освобождения chache, это будет работать одинаково.
  4. Сохраните объявление как временное в базе данных, это будет означать, что при возврате представления это действительно редактирование созданного объявления, а не редактирование временного объявления (а не в базе данных). Проблема может заключаться в том, что пользователь отменяет после первой проверки работоспособности, тогда у нас будет объявление, которое не будет заполнено в базе данных. Другой минус - увеличение количества идентификаторов (идентификаторов), даже если объявление никогда не используется. И последняя проблема с этим решением заключается в том, что в таблице объявлений будут отображаться неполные объявления.

Отвод советы

Мое решение: я в конечном итоге использовать System.Web.Cache для хранения данных между запросами. Когда объявление создается и принимается, оно будет удалено из кеша и добавлено в базу данных.

+0

О 3-м пункте - вы все еще можете использовать HttpContext.Current.Cache в ASP.NET MVC так же, как вы использовали его в ASP.NET WebForms , – tpeczek

+0

Решетка !, но третья точка будет лучше, чем другая? И если да, то почему? – Banshee

ответ

2

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

+0

Спасибо, Как будет эта шкала? И почему это лучше, чем наличие общего синглтона, который содержит данные для всех пользователей? – Banshee

+0

экземпляры 'TempDataDictionary' предназначены для сохранения сингулярных запросов. Вы можете пойти с синглом, но тогда вам нужно управлять очисткой и удалением предметов, как только вы закончите с ними. –

0

Я решил эту проблему с помощью формы JQuery плагин: http://jquery.malsup.com/form/

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

Примечание: Если вы возвращаете JsonResult в MVC с помощью плагина, вам нужно будет обернуть JsonResult в теге «textarea». см. этот пост для класса, который обертывает JsonResult и сортирует анонимность testarea: http://aspzone.com/tech/jquery-file-upload-in-asp-net-mvc-without-using-flash/

Смежные вопросы