Я не могу правильно понять логику для этого. Я использую мастер с отдельными представлениями в контроллере (без JavaScript). Основываясь на выборе в шаге 2 мастера, я хочу пропустить шаг 7 или показать шаг 7. Мастер использует кнопки «Далее» / «Назад» для управления тем, куда идти.
Мне удалось «показать» Шаг 7, если пользователь выбрал «A» (например), но когда я создал логику, чтобы пропустить Шаг 7, если были выбраны «B» или «C», я либо получил «» Ошибка перенаправления / слишком много перенаправлений »в Chrome (я удалил файлы cookie безрезультатно), или кнопка« Далее »на предыдущем шаге не будет работать (она просто показывает то же представление).
Шаг 2 сам по себе не важен с точки зрения контроллера, он содержит раскрывающийся список с тремя вариантами выбора, и в зависимости от этого выбора у меня есть код контроллера (я опускаю сериализацию кода myViewModel в Контроллер, который украшен [Serializable]
):
// STEP 6:
// Based on selection in Step 2, show or don't show Step 7
public ActionResult Step6(string backButton, string nextButton)
{
if (backButton != null)
return RedirectToAction("Step5");
else if ((nextButton != null) &&
ModelState.IsValid &&
(myVieModel.MyModel.MyDropDown ==
MyNamespace.Models.MyModel.MyEnum.A))
return RedirectToAction("Step7");
else if ((nextButton != null) &&
ModelState.IsValid &&
(myVieModel.MyModel.MyDropDown ==
MyNamespace.Models.MyModel.MyEnum.B) ||
(myVieModel.MyModel.MyDropDown ==
MyNamespace.Models.MyModel.MyEnum.C))
return RedirectToAction("Step8");
else
return View("Step6", myViewModel);
}
// STEP 7:
// Only shown if Choice in MyDropDown is "A",
// otherwise if "B" or "C" skipped
public ActionResult Step7(string backButton, string nextButton)
{
if (backButton != null)
return RedirectToAction("Step6");
else if ((nextButton != null) &&
ModelState.IsValid)
return RedirectToAction("Step8");
else
return View("Step7", myViewModel);
}
// STEP 8:
// Arrive here either from Step 6
// (if "B" or "C" chosen),
// or from Step 7 (if "A" chosen)
public ActionResult Step8(string backButton, string nextButton)
{
if ((backButton != null) &&
(myVieModel.MyModel.MyDropDown ==
MyNamespace.Models.MyModel.MyEnum.A))
return RedirectToAction("Step7");
else if ((backButton != null) &&
(myVieModel.MyModel.MyDropDown ==
MyNamespace.Models.MyModel.MyEnum.B) ||
(myVieModel.MyModel.MyDropDown ==
MyNamespace.Models.MyModel.MyEnum.C))
return RedirectToAction("Step6");
else if ((nextButton != null) &&
ModelState.IsValid)
return RedirectToAction("Step9");
else
return View("Step8", myViewModel);
}
Я знаю, что просто неправильно понимаю логику. Любая помощь очень ценится.
Приведенный выше код (без логики, о которой я спрашиваю) отлично работает, как и код, который я использую для отображения DropDown.