Джонас абсолютно прав.Немного дальнейшей разбивки ниже.
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 не заканчивает, чтобы не сохранить неполные данные в базе данных.
Я надеюсь, вы найдете этот метод реализации мастера намного проще в использовании и обслуживании, чем любой из ранее упомянутых методов.
Спасибо за чтение.