Поддерживать параметры SelectList поверх постбэков - PullRequest
0 голосов
/ 23 сентября 2011

Мне было интересно, есть ли способ сохранить список параметров в списке выбора в MVC 3. Я довольно новичок в MVC, но в WebForms вы можете заполнить DropDownList при первой загрузке страницы, а затем ViewState будет поддерживать этот список для всех AutoPostBacks. Это было хорошо, потому что часто DropDownLists заполняются запросом к базе данных. Я знаю, что ViewState не существует в MVC, но есть ли лучший способ повторно заполнить список SelectList без необходимости обращаться к базе данных во время запроса каждого сообщения?

Ответы [ 2 ]

1 голос
/ 23 сентября 2011

У вас есть несколько вариантов здесь. Ваше выбранное значение будет опубликовано обратно. Имея это в виду, поскольку у вас больше нет ViewState, в идеале вы хотите

  1. Имейте свой репозиторий (если у вас его нет - создайте его. Вы просто запрашиваете в хранилище данные, и он управляет кэшированием или загрузкой), который вы запрашиваете для данных в раскрывающемся списке, кэшируете данные и просто запрашиваете это снова. Перепвязать свой список (используйте DropDownFor)
  2. Используйте MVCContrib's Html.Serialize, чтобы по существу ViewState его, однако кэш немного чище и не полагается на данные, отправляемые туда и обратно.

Также помните, что после публикации ваших данных, если все «хорошо», вы хотите НАЗАД вернуться к своему действию «GET», чтобы перезагрузить данные и отобразить их клиенту. Это была проблема в веб-формах, когда пользователь видел XYZ после обратной передачи, но после обновления видел YXX. Использование шаблона PRG в MVC posts-redirects-gets для загрузки свежих данных.

После публикации вы, как правило, должны только повторно отображать данные, если произошла ошибка проверки, в противном случае перенаправьте на метод get.

0 голосов
/ 23 сентября 2011

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

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