2012-04-03 8 views
0

Ich kann die Logik dafür nicht richtig abfragen. Ich verwende einen Assistenten mit separaten Ansichten im Controller (kein Javascript). Basierend auf einer Auswahl in Schritt 2 des Assistenten möchte ich entweder Schritt 7 überspringen oder Schritt 7 anzeigen. Der Assistent verwendet die Schaltflächen next/back, um zu steuern, wohin er gehen soll.Steuerungslogik zum Anzeigen/Überspringen einer Ansicht basierend auf der Auswahl in einer früheren Ansicht (mithilfe eines Assistenten)

Ich konnte Schritt 7 "zeigen", wenn der Benutzer "A" (zum Beispiel) ausgewählt hat, aber wenn ich die Logik erstellt habe, um Schritt 7 zu überspringen, wenn entweder "B" oder "C" ausgewählt wurde, erhalte ich entweder a "Redirect Loop/zu viele Redirects Fehler" auf Chrome (Ich habe die Cookies ohne Erfolg gelöscht) oder die Schaltfläche "Weiter" im vorherigen Schritt wird nicht funktionieren (es zeigt nur die gleiche Ansicht).

Schritt 2 an und für sich ist in Bezug auf den Controller unwichtig, es enthält eine Dropdown-Liste mit den 3 Auswahlmöglichkeiten, und basierend auf dieser Wahl ist dies der Controller-Code, den ich habe (ich lasse die MyViewModel-Code in der Controller, der mit [Serializable]) verziert ist:

// 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); 
    } 

ich weiß, ich bin gerade nach unten falsch, die Logik zu bekommen. Jede Hilfe wird sehr geschätzt.

Der obige Code (ohne die Logik, nach der ich frage) funktioniert perfekt, genauso wie der Code, den ich für die Anzeige von DropDown verwende.

Antwort

0

Ugh, sollte ich eingekapselt haben die || Logik in seinem eigenen () thusly zu lesen:

else if ((backButton != null) && 
    //Extra opening parenthesis--> 
    ((myVieModel.MyModel.MyDropDown == 
    MyNamespace.Models.MyModel.MyEnum.B) || 
    (myVieModel.MyModel.MyDropDown == 
    MyNamespace.Models.MyModel.MyEnum.C))) //<--extra closing parenthesis 
    return RedirectToAction("Step6"); 
+0

Wird nicht lassen Sie mich für 2 Tage meine eigene Antwort akzeptieren, so dass, wenn jemand eine bessere Lösung hat nur post it . – REMESQ

Verwandte Themen