2012-04-11 5 views
1

Ist es möglich, ein mehrstufiges Form (Wizard) in MVC3 haben? , um es einfach zu machen: ein 2-Schritte-Formular, um ein Produkt zu ändern.MVC3 vielstufige Form (Assistent)

mögliche Lösung: die gleiche viewbag.Product in den verschiedenen Formen verwendet (es von einem zum anderen weitergeben).

Danke.

+1

möglich Duplikat [mehrstufigen Registrierungsprozess Probleme in asp.net MVC (gespaltet Viewmodel, einziges Modell)] (http://stackoverflow.com/questions/6402628/multi-step-registration-process-issues-in ASP-net-mvc-gespaltet-Viewmodels-sing) –

+0

bei diesem einen Blick [blog] (http://afana.me/post/create-wizard-in-aspnet-mvc-3.aspx) – Dmitry

+0

möglich Duplikat von [Beliebige Beispiel-MVC3-Wizard-Apps (mehrstufig) (NO JQUERY)] (http://stackoverflow.com/questions/8054640/any-sample-mvc3-wizard-apps-multi-step-no-jquery) – jgauffin

Antwort

1

Wizards sind nur einfache Schritte in ein einfaches Modell zu verarbeiten. Es gibt keinen Grund, mehrere Modelle für einen Assistenten zu erstellen. Alles, was Sie tun würden, ist ein einzelnes Modell zu erstellen und es zwischen Aktionen in einem einzigen Controller zu übergeben.

Die oben genannten Coed ist dumm einfach so ersetzen Sie Ihre Felder dort. Als nächstes beginnen wir mit einer einfachen Aktion, die unseren Assistenten startet.

public ActionResult WizardStep1() 
    { 
     return View(new MyModel()); 
    } 

Dies ruft die Ansicht „WizardStep1.cshtml (wenn Rasiermesser, das ist). Sie die Vorlagen-Assistenten erstellen können, wenn Sie. Wollen wir nur die Post zu einer anderen Aktion werden umgeleitet wird.

<WizardStep1.cshtml> 
@using (Html.BeginForm("WizardStep2", "MyWizard")) { 

die Sache Bemerkenswert ist, dass wir dies auf eine andere Aktion sein Posting werden, die WizardStep2 Aktion

[HttpPost] 
    public ActionResult WizardStep2(MyModel myModel) 
    { 
     return ModelState.IsValid ? View(myModel) : View("WizardStep1", myModel); 
    } 

In dieser Aktion, die wir überprüfen, ob unser Modell gültig ist, und wenn ja, es unsere Zauberern wir schicken tep2.cshtml view sonst senden wir es zurück zu Schritt eins mit den Validierungsfehlern. In jedem Schritt senden wir es zum nächsten Schritt, validieren diesen Schritt und gehen weiter. Nun könnten einige versierte Entwickler sagen, dass wir nicht zwischen solchen Schritten wechseln können, wenn wir [Required] -Attribute oder andere Datenannotationen zwischen den Schritten verwenden. Und Sie hätten Recht, also entfernen Sie die Fehler bei noch zu prüfenden Artikeln. Wie unten.

[HttpPost] 
    public ActionResult WizardStep3(MyModel myModel) 
    { 
     foreach (var error in ModelState["StepTwoData"].Errors) 
     { 
      ModelState["StepTwoData"].Errors.Remove(error); 
     } 

Schließlich würden wir das Modell einmal in den Datenspeicher speichern. Dies verhindert auch, dass ein Benutzer einen Assistenten startet, aber nicht, dass unvollständige Daten nicht in der Datenbank gespeichert werden.

Ich hoffe, dass Sie diese Methode finden einen Assistenten viel einfacher zu implementieren als eine der zuvor genannten Methoden zu verwenden und zu warten.

Danke fürs Lesen.