Подтвердить что ты не робот

Как сделать мастер с ASP.Net MVC

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

Каков наилучший/правильный способ сделать такой мастер с помощью ASP.Net MVC

edit: Мой босс сейчас говорит "нет javascript" - любые мысли о том, как обойти это ограничение?

4b9b3361

Ответ 1

Я не верю, что есть лучший/правильный способ, но способ, которым я это сделаю, - это...

Каждый мастер получает свою собственную страницу. Каждый шаг получает свой собственный div. Все шаги находятся в одной и той же форме.

Предыдущие/следующие кнопки будут скрыть/показать div на каждом шаге процесса. Кнопка отправки последнего шага представляет всю форму. Было бы довольно тривиально реализовать это с помощью jQuery, и его было бы легко поддерживать, поскольку все шаги мастера находятся в одной ViewPage.

На стороне контроллера у вас есть два метода контроллера: версия HttpVerbs.Get, которая подготовит форму для просмотра и версию HttpVerbs.Post, которая примет форму FormsResult и проанализирует ее, чтобы получить информацию, необходимую для отправки пользователь отвечает на хранение/другие процессы.


Ничего себе, ваш босс воняет.

Этот ответ почти изящно работает для тех ******, у которых отключен javascript (да, оба они). Вы можете настроить его, чтобы скрыть следующие предыдущие кнопки с помощью CSS и показать их в своем javascript-коде. Таким образом, люди с javascript видят мастера, а люди без javascript будут видеть всю форму (без кнопок next/prev).

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

Ответ 2

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

Вы можете сделать свои кнопки Next и Prev с помощью метода ActionLink HtmlHelper.

Ответ 3

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

Ответ 4

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

Ответ 5

Если вы не можете использовать Javascript и не хотите тратить ресурсы сервера на переменные сеанса, вы также можете сериализовать и десериализовать значения, вводимые на разных этапах, и передать их туда и обратно с помощью скрытого поля ввода. Немного похоже на ViewState в ASP.NET Webforms.

Ответ 6

Я собрал мастер входа и задокументировал идеи, стоящие за ним в моем блоге, если это помогает: текст ссылки

Ответ 7

Вы можете использовать простой компонент MVCWizard.Wizard, доступный на NuGet. WizardController позволяет вам создать мастер с частичным представлением. Существует также AutoWizardController, который отображает весь мастер в одном представлении. Все эти компоненты работают с сеансом для хранения состояния модели.