Мне нужна помощь в создании мастера в asp.net mvc.
Этот мастер будет содержать около 7 или 8 шагов.
Вот как я смоделировал контроллер, и я надеялся получить некоторую обратную связь о том, является ли это правильным подходом или посмотреть, есть ли лучшие способы, которые кто-то здесь может порекомендовать.
- Я создал отдельный класс модели представления для каждого из шагов.
- У меня есть класс Wizard, который содержит каждую из этих отдельных моделей + свойства, такие как CurrentStep и т. Д.
- Я создал отдельное представление для каждого из шагов.
Мой контроллер выглядит так
public class MyRegistrationController
{
[HttpGet]
public ActionResult Step1()
{
var wizard = TempData[WizardKey] as RegistrationWizard;
RegistrarRegisterVoterNewRegistrant model;
if (wizard == null || wizard.Step1Model == null)
{
wizard = new RegistrationWizard();
model = new NewRegistrant();
}
else
model = wizard.Step1Model;
wizard.CurrentStep = 1;
wizard.Step1Model = model;
TempData[WizardKey] = wizard;
return View("Step1", model);
}
[HttpPost]
public ActionResult Step1(NewRegistrant model)
{
var wizard = TempData[WizardKey] as RegistrationWizard;
if (wizard == null)
wizard = new RegistrationWizard();
if (!ModelState.IsValid)
return View("Step1", model);
wizard.Step1Model = model;
wizard.MaxCompletedStep = 1;
TempData[WizardKey] = wizard;
return RedirectToAction("Step2");
}
[HttpGet]
public ActionResult Step2()
{
var wizard = TempData[WizardKey] as RegistrationWizard;
PersonalInformation model;
if (wizard == null || wizard.Step1Model == null)
return RedirectToAction("Step1");
if (wizard.Step2Model == null)
model = new PersonalInformation ();
else
model = wizard.Step2Model;
wizard.CurrentStep = 2;
TempData[WizardKey] = wizard;
return View("Step2", model);
}
[HttpPost]
public ActionResult Step2(PersonalInformation model)
{
var wizard = TempData[WizardKey] as RegistrationWizard;
if (wizard == null || wizard.CurrentStep != 2 || wizard.Step1Model == null)
return RedirectToAction("Step1");
if (!ModelState.IsValid)
return View("Step2", model);
wizard.Step2Model = model;
wizard.MaxCompletedStep = 2;
TempData[WizardKey] = wizard;
return RedirectToAction("Step3");
}
}
Спасибо!