2016-04-25 4 views
0

Ich arbeite derzeit an einem sehr großen Formular. Ich dachte, es wäre eine gute Idee, das Formular durch die Implementierung eines Formularassistenten (mehrere Ansichten/Aktionsergebnisse) zu unterteilen, um die Benutzerfreundlichkeit zu verbessern.ASP.NET MVC Formular Wizard verhindern Benutzer überspringen Assistenten Schritt (Controller Action) mit URL-Leiste

Eine Voraussetzung ist, dass der Benutzer einen kleinen Eignungstest durchführen muss, der sicherstellt, dass er die Mindestanforderungen erfüllt, bevor er den Anwendungsassistenten selbst startet.

Nachdem ich nichts dergleichen getan habe, kann ich nur eine Lösung für dieses Problem sehen, die ein Flag verwendet, z. B. IsErtragbar in einer Sitzung, die festlegt, ob der Benutzer auf die Formularansicht zugreifen kann. Angenommen, mein Controller verfügt über zwei ActionResults (Eligibility und WizardStepOne), die separate Ansichten für den Server bereitstellen. Zum Beispiel:

-Controller - Ungeprüfte-Code

public ActionResult Eligibility() 
{ 
    Return View(); 
} 

[HttpPost] 
public ActionResult Eligibility(EligibilityViewModel model) 
{ 
    if(!ModelState.IsValid) 
    { 
     return View(model); 
    } 

    Session["IsEligible"] = true; 

    return("Success"); 
} 

public ActionResult WizardStepOne() 
{ 
    bool stuff = (bool)Session["stuff"]; 

    if(IsEligible == null) 
    { 
     return("Eligibility"); 
    } 

    return RedirectToAction("Eligibility"); 
} 

Kurz gesagt, wenn der Benutzer versucht, den ersten Schritt des Assistenten und der IsEligible Flag Zugriff wurde durch die Teilnahmeberechtigung Beitrag Aktion wird der Benutzer nicht gesetzt Sie werden zurück zum Berechtigungsformular weitergeleitet.

Ich habe auch in Action-Filter untersucht, konnte aber nicht viel Sinn machen. Ich muss diese Funktionalität auch zu einem späteren Zeitpunkt implementieren, um zu verhindern, dass Benutzer zwischen den Assistentenschritten mit der URL überspringen, z. B. WizardStepOne überspringen und bei WizardStepTwo starten.

Gibt es einen besseren Ansatz als den oben beschriebenen in dieser Situation? Ich würde lieber vermeiden, eine Sitzung zu verwenden, da das Neustarten des Formulars problematisch wird, da es eine Neustart-Schaltfläche erfordern würde, um die Sitzung insbesondere zwischen Assistentenschritten aufzugeben.

Antwort

0

Was Sie erwähnen, hört sich an, als ob Sie eine einfache Zustandsmaschine verwenden könnten, um gültige Schritte über Ihr Formular zu definieren. Wenn der Benutzer zum Beispiel in Stufe 3 ist, werden Sie prüfen, ob er von Schritt 2 kam oder nicht. Für jeden Schritt für einen bestimmten Benutzer und eine Sitzung> können Sie in seiner Sitzung einen Hashwert speichern. Auf diese Weise konnten sie nicht direkt URL eingeben.

+0

Interessant. Können Sie ein Beispiel geben? – user2488275

Verwandte Themen