Любые образцы приложений MVC3 Wizard (многошаговые) (БЕЗ JQUERY) - PullRequest
1 голос
/ 08 ноября 2011

Я искал максимум / минимум в GooglePlex и здесь для примера мастера MVC3 (многошаговый), который НЕ задействует элементы проверки клиентов MVC3 (и jQuery).Я видел по крайней мере одно подробное объяснение некоторых элементов здесь: проблемы многоэтапной регистрации в asp.net mvc (разделенные модели просмотра, одиночная модель) , но я не смог заставить его работать должным образом.

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

В любом случае, любое руководство для примеров мастера не из Jquery MVC3 будетотличный.Заранее спасибо.

Ответы [ 2 ]

5 голосов
/ 08 ноября 2011

Я бы сделал что-то подобное, если jQuery / javascript не разрешено использовать

  1. Создать контроллер для мастера
  2. Создайте модель, которая содержит все поля, которые установит мастер.
  3. Создать одно действие на страницу мастера, все действия должны использовать одну и ту же модель
  4. Создайте последнее действие, которое сохранит все в БД.
4 голосов
/ 20 сентября 2012

Джонас абсолютно прав.Немного дальнейшей разбивки ниже.

public class MyModel
{
     [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
     public Guid Id { get; set };
     public string StepOneData { get; set; }
     public string StepTwoData { get; set; }
}

Вышеприведенный код глуп, просто, поэтому замените свои поля там.Затем мы начнем с простого действия, которое запускает нашего мастера.

    public ActionResult WizardStep1()
    {
        return View(new MyModel());
    }

Это вызывает представление "WizardStep1.cshtml (если используется бритва, которая есть). Вы можете использовать мастер создания шаблона, если хотите. Мы будемпросто перенаправьте сообщение на другое действие.

<WizardStep1.cshtml>
@using (Html.BeginForm("WizardStep2", "MyWizard")) {

Следует отметить, что мы будем публиковать это на другое действие, действие WizardStep2

    [HttpPost]
    public ActionResult WizardStep2(MyModel myModel)
    {
        return ModelState.IsValid ? View(myModel) : View("WizardStep1", myModel);
    }

В этом действиимы проверяем, действительна ли наша модель, и если да, то отправляем ее в наше представление WizardStep2.cshtml, в противном случае отправляем ее на шаг первый с ошибками проверки. На каждом шаге мы отправляем ее на следующий шаг, проверяем этот шаг и продолжаемТеперь некоторые опытные разработчики могут сказать, что мы не можем переходить между шагами, такими как этот, если мы используем атрибуты [Required] или другие аннотации данных между шагами. И вы были бы правы, поэтому удалите ошибки на элементах, которые еще предстоит проверитькак показано ниже.

    [HttpPost]
    public ActionResult WizardStep3(MyModel myModel)
    {
        foreach (var error in ModelState["StepTwoData"].Errors)
        {
            ModelState["StepTwoData"].Errors.Remove(error);
        }

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

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

Спасибо за чтение.

...