Как сохранить текст во время обратной передачи с ASP.NET MVC 3 - PullRequest
3 голосов
/ 15 октября 2011

У меня есть экран редактирования продукта. Пользователь может выбрать Продавца для Продукта. Для этого я отображаю диалоговое окно jQueryUI, которое позволяет им просматривать и выбирать поставщика. Когда пользователь выбирает Vendor, я обновляю скрытый ввод VendorID на странице, который является частью модели моей страницы. Я также обновляю несколько div-ов с подробностями о Продавце, которого они выбрали. Они предназначены только для отображения - только идентификатор необходим для сохранения выбранного Продавца.

Это все отлично работает, за исключением случаев, когда при обратной передаче возникает ошибка, и в этом случае я снова отображаю тот же вид ModelState заботится о сохранении всех моих полей формы (включая скрытый VendorID). Однако, мои div с текстом Vendor (конечно) пустые, так как они не размещены на сервере.

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

Три варианта, которые я могу придумать:

  1. При обратной передаче, если есть ошибка, перейдите в базу данных, выберите поставщика, используя предоставленный VendorID, и заново заполните модель текстом, который я хочу отобразить.
  2. Используйте RenderAction и выполняйте действие, которое отображает сведения о выбранном Продавце.
  3. Используйте текстовые поля только для чтения вместо div для отображения сведений о поставщике.

Ничто из этого не кажется мне очень удовлетворительным. Я чувствую, что могу упустить очевидное решение. Есть ли лучшие решения?

1 Ответ

3 голосов
/ 15 октября 2011

Я бы посоветовал вам не указывать дополнительную информацию о поставщике как часть главной страницы. Создайте функцию JavaScript showVendorInfo (). При вызове, если скрытый ввод VendorID имеет значение, он получает соответствующую информацию о продавце через AJAX и отображает ее, используя метод действия AjaxGetVendorInfo. Вызывайте эту функцию из двух мест:

  • В document.ready ()
  • после выбора поставщика с отображением jQueryUI.

Теперь это будет в методе действия. Если вы ожидаете, что у ваших пользователей возникнут проблемы с задержкой, вы можете сделать следующее, чтобы избежать некоторых вызовов ajax: В представлении проверьте, знаете ли вы VendorID; если это так, вызовите Html.RenderAction, чтобы вызвать тот же метод действия AjaxGetVendorInfo из представления.

Бонус к этому заключается в том, что он избегает того, что я считаю большим нет-нет: включая значения только для отображения и значения привязки модели в вашей ViewModel. Это очень сбивает с толку ViewModel, особенно при наличии ошибок валидации. [Получение на мыльницу] Лучше, чтобы у вашей ViewModel были свойства, предназначенные для привязки модели, для вашего состояния. Поместите значения списка, дополнительную информацию об отображении и т. Д. В ViewData или отобразите их через AJAX.

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