Domanda

Il nostro sito ha più "procedure guidate" dove vari dati vengono raccolti su più pagine e non possono essere salvati nel database fino all'ultimo passaggio.

Qual è il modo migliore / corretto per creare una procedura guidata come questa con ASP.Net MVC

modifica: il mio capo ora sta dicendo " no javascript " - qualche idea su come aggirare questa limitazione?

È stato utile?

Soluzione

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

Ogni procedura guidata ottiene la propria pagina. Ogni passaggio ha il suo div. Tutti i passaggi sono nella stessa forma.

I pulsanti precedente / successivo essenzialmente nascondevano / mostravano il div in ogni fase del processo. Il pulsante di invio dell'ultimo passaggio invia l'intero modulo. Sarebbe piuttosto banale implementarlo usando jQuery, e sarebbe facile da mantenere poiché tutti i passaggi della procedura guidata sono in un unico ViewPage.

Sul lato del controller, avresti due metodi di controller, la versione HttpVerbs.Get che preparerebbe il modulo per la visualizzazione e la versione HttpVerbs.Post che richiederebbe un FormsResult e lo analizzerebbe per ottenere le informazioni richieste per l'invio le risposte dell'utente allo storage / ad altri processi.


Wow, il tuo capo puzza.

Questa risposta funziona quasi con grazia per quei ****** che hanno disabilitato javascript (sì, entrambi). Puoi modificarlo per nascondere i pulsanti successivo precedente tramite CSS e scoprirli nel tuo codice javascript. In questo modo le persone con javascript vedono la procedura guidata e le persone senza javascript vedranno l'intero modulo (senza i pulsanti avanti / indietro).

L'altra opzione è quella di creare una vista per ogni passaggio della procedura guidata. È possibile archiviare i risultati intermedi del modulo nella sessione. In questo modo costerebbe un sacco di tempo e impegno per l'implementazione, il che significa che potresti probabilmente spremere un po 'di straordinario dal tuo capo quando dimostri, in circa venti minuti di sforzo che fai durante il pranzo, quanto sia facile implementare il percorso javascript.

Altri suggerimenti

Se non è possibile utilizzare JavaScript, rendere ogni passaggio una vista, con un metodo nel controller, e mantenere i dati in sessione fino a quando non si è pronti per l'invio al database.

Puoi creare i tuoi pulsanti Next e Prev usando il metodo ActionLink HtmlHelper.

Un altro modo è salvare l'oggetto 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 l'ulteriore vantaggio di poter 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 lo stato della sessione.

Rendi i diversi pannelli tutti lato client ... tutti nella stessa forma ... e quando viene premuto il pulsante di invio finale, puoi pubblicare tutti i valori contemporaneamente.

Se non è possibile utilizzare Javascript e non si desidera spendere risorse del server con variabili di sessione, è anche possibile 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 Webforms ASP.NET.

Ho messo insieme una procedura guidata di accesso e documentato le idee alla base sul mio blog se ciò aiuta: Testo del collegamento

È possibile utilizzare il semplice componente MVCWizard.Wizard disponibile su NuGet. WizardController consente di creare una procedura guidata utilizzando la vista parziale. Esiste anche AutoWizardController che esegue il rendering dell'intera procedura guidata in un'unica vista. Tutti questi componenti funzionano con la sessione per memorizzare lo stato del modello.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top