Любые образцы приложений MVC3 Wizard (многошаговые) (БЕЗ JQUERY)
Я искал максимум / минимум в GooglePlex и здесь для примера мастера MVC3 (многошаговый), который НЕ задействует элементы проверки клиентов MVC3 (и jQuery). Я видел по крайней мере одно подробное объяснение некоторых элементов здесь: проблемы многоэтапной регистрации в asp.net mvc (разделенные модели представления, одиночная модель), но я не смог заставить его работать должным образом.
Будучи новичком в MVC3 и программировании в целом, я подозреваю, что мой уровень опыта не позволяет мне заставить его работать.
Как бы то ни было, любое руководство по использованию не-Jquery MVC3 мастера было бы здорово. Заранее спасибо.
2 ответа
Я хотел бы сделать что-то вроде этого, если jQuery/javascript не разрешено использовать
- Создать контроллер для мастера
- Создайте модель, которая содержит все поля, которые установит мастер.
- Создайте одно действие на страницу мастера, все действия должны использовать одну и ту же модель
- Создайте последнее действие, которое сохраняет все в БД.
Джонас абсолютно прав. Немного дальше разбивка ниже.
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);
}
Наконец, мы сохраняем модель один раз в хранилище данных. Это также не позволяет пользователю, который запускает мастер, но не завершает его, не сохранять неполные данные в базе данных.
Я надеюсь, что вы найдете этот метод реализации мастера намного проще в использовании и обслуживании, чем любой из ранее упомянутых методов.
Спасибо за прочтение.