MVC - сохранение данных модели представления между запросами - PullRequest
1 голос
/ 28 декабря 2011

Я ищу некоторые предложения или, возможно, решение, которое я упустил из-за проблемы, возникшей у меня с проектом, над которым я работаю. Это предполагает сохранение данных ViewModel между несколькими запросами. Вот пример:

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

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

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

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

1 Ответ

1 голос
/ 28 декабря 2011

Это сводится к базовому ограничению веб-запроса, и каждый запрос по сути «запускается заново».Сессия определенно создана для того, чтобы вы могли хранить вещи за пределами модели запроса, и это единственный вариант, если вы не хотите использовать более продвинутый подход с использованием javascript.

Оформить заказ этот пост , поскольку я уже рассмотрел основные решения для редактирования списка, и некоторые из них применимы здесь.

В вашем случае я бы определенно рекомендовал использоватьмодальное / диалоговое окно для выбора «других» элементов, поскольку это устранит большинство неприятностей, с которыми вы столкнетесь, полностью уйдя со страницы (и если эта страница используется в других местах, вы можете легко повторно использовать частичные представления длязаставить его работать как в диалоге, так и на странице без дублирования).Это потребует небольшого количества javascript, но будет намного проще в управлении, так как форма на самом деле останется на странице, и в большинстве случаев, с которыми я столкнулся, это удобнее для пользователя.

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

В заключение, использование сессии - единственный вариант, если вы не хотите принимать решение на стороне клиента.Я бы порекомендовал клиентское решение, так как jquery значительно облегчил нам жизнь в этих сценариях, но он сложнее.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...