come creare un wizard con ASP.Net MVC

Il nostro sito ha più “procedure guidate” in cui vari dati vengono raccolti su più pagine e non possono essere salvati nel database fino all’ultimo passo.

Qual è il modo migliore / corretto per creare un wizard come questo con ASP.Net MVC

modifica: il mio capo ora dice “no javascript” – qualche idea su come aggirare questa restrizione?

Non credo che esista un modo migliore / corretto, ma il modo in cui lo farei è …

Ogni procedura guidata ottiene la propria pagina. Ogni fase ottiene il proprio div. Tutti i passaggi sono nella stessa forma.

I pulsanti precedente / successivo in sostanza nascondono / mostrano il div in ogni fase del processo. Il pulsante di invio dell’ultimo passo invia l’intero modulo. Sarebbe piuttosto banale implementarlo usando jQuery, e sarebbe facile da mantenere poiché tutti i passaggi della procedura guidata si trovano in un’unica ViewPage.

Sul lato controller, dovresti disporre di due metodi controller, la versione HttpVerbs.Get che preparerebbe il modulo per la visualizzazione e la versione HttpVerbs.Post che richiederebbe un FormsResult e la analizzerà per ottenere le informazioni richieste per inviare le risposte dell’utente allo stoccaggio / altri processi.


Wow, il tuo capo puzza.

Questa risposta funziona con grazia per quei ****** che hanno il javascript disabilitato (sì, entrambi). Puoi modificarlo per hide i pulsanti precedenti tramite CSS e visualizzarli nel tuo codice javascript. In questo modo le persone con javascript vedranno la procedura guidata e le persone senza javascript vedranno l’intero modulo (senza i pulsanti next / prev).

L’altra opzione è creare una vista per ogni passo della procedura guidata. È ansible memorizzare i risultati intermedi del modulo nella sessione. In questo modo sarebbe costato molto tempo e sforzi per l’implementazione, il che significa che potresti probabilmente spremere degli straordinari dal tuo capo quando dimostrerai, con una ventina di minuti di impegno speso durante il pranzo, quanto sia facile implementare il percorso di javascript.

Se non è ansible utilizzare JavaScript, quindi rendere ogni fase di una visualizzazione, con un metodo nel controller, e mantenere i dati in sessione fino a quando non si è pronti per l’invio al database.

Puoi fare i tuoi pulsanti Avanti e Indietro usando il metodo ActionLink HtmlHelper.

Un altro modo consiste nel salvare l’object incompleto che si sta creando con la procedura guidata nel database e passare semplicemente la chiave primaria al passaggio successivo della procedura guidata. So che questo significa che è necessario rendere nulli alcuni dei campi del database, ma ha il vantaggio aggiunto che è ansible salvare la chiave primaria in un cookie e consentire all’utente di tornare alla procedura guidata in un secondo momento. Questa opzione non richiede javascript o stato di sessione.

Fai in modo che i diversi pannelli siano tutti client side … tutti nella stessa forma … e quando viene premuto il pulsante di invio finale, puoi pubblicare tutti i valori allo stesso tempo.

Se non puoi usare Javascript e non vuoi spendere risorse del server con le variabili Session, puoi anche serializzare e deserializzare i valori immessi nei diversi passaggi e passarli avanti e indietro utilizzando un campo di input nascosto. Un po ‘come ViewState in Web Form ASP.NET.

Ho creato un wizard di accesso e ho documentato le idee dietro di esso sul mio blog se questo aiuta: link text

È ansible utilizzare il componente semplice MVCWizard.Wizard disponibile su NuGet. Il WizardController consente di creare una procedura guidata utilizzando la vista parziale. C’è anche l’AutoWizardController che rende l’intero wizard in una singola vista. Tutti questi componenti operano con la sessione per memorizzare lo stato del modello.

C’è un metodo molto semplice, flessibile ed estensibile in questa domanda: Come semplificare le mie windows di dialogo modali interlacciate statefull in ASP.NET MVC