web-dev-qa-db-fra.com

comment faire un assistant avec ASP.Net MVC

Notre site dispose de plusieurs "assistants" où diverses données sont collectées sur plusieurs pages, et ne peuvent pas être enregistrées dans la base de données jusqu'à la dernière étape.

Quelle est la meilleure/bonne façon de créer un assistant comme celui-ci avec ASP.Net MVC

edit: Mon patron dit maintenant "pas de javascript" - des réflexions sur la façon de contourner cette restriction?

47
Joe

Je ne crois pas qu'il existe une meilleure façon/correcte, mais la façon dont je le ferais est ...

Chaque assistant obtient sa propre page. Chaque étape obtient sa propre div. Toutes les étapes sont sous la même forme.

Les boutons précédent/suivant masqueraient/afficheraient essentiellement les div à chaque étape du processus. Le bouton d'envoi de la dernière étape soumet le formulaire entier. Il serait assez trivial d'implémenter cela à l'aide de jQuery, et ce serait facile à maintenir car toutes les étapes de l'assistant se trouvent dans une seule ViewPage.

Du côté du contrôleur, vous auriez deux méthodes de contrôleur, la version HttpVerbs.Get qui préparerait le formulaire pour la visualisation et la version HttpVerbs.Post qui prendrait un FormsResult et l'analyserait pour obtenir les informations nécessaires pour soumettre les réponses de l'utilisateur au stockage/autres processus.


Wow, ton patron pue.

Cette réponse fonctionne presque gracieusement pour les ****** qui ont désactivé javascript (oui, les deux). Vous pouvez le modifier pour masquer les boutons suivant-précédent via CSS et les afficher dans votre code javascript. De cette façon, les personnes avec javascript voient l'assistant et les personnes sans javascript verront le formulaire entier (sans les boutons suivant/précédent).

L'autre option consiste à créer une vue pour chaque étape de l'assistant. Vous pouvez stocker les résultats intermédiaires du formulaire dans la session. Cette méthode coûterait beaucoup de temps et d'efforts à mettre en œuvre, ce qui signifie que vous pourriez probablement retirer des heures supplémentaires de votre patron lorsque vous démontrez, en une vingtaine de minutes d'efforts que vous passez pendant le déjeuner, à quel point la route javascript est facile à mettre en œuvre.

45
Will

Si vous ne pouvez pas utiliser JavaScript, faites de chaque étape une vue, avec une méthode dans le contrôleur, et conservez vos données en session jusqu'à ce qu'elles soient prêtes à être soumises à la base de données.

Vous pouvez créer vos boutons Suivant et Précédent à l'aide de la méthode ActionLink HtmlHelper.

20
Matthew

Une autre façon consiste à enregistrer l'objet incomplet que vous créez avec l'assistant dans la base de données et à passer simplement la clé primaire à l'étape suivante de l'assistant. Je sais que cela signifie que vous devez rendre certains des champs de la base de données annulables, mais cela présente l'avantage supplémentaire que vous pouvez enregistrer la clé primaire dans un cookie et permettre à l'utilisateur de revenir à l'assistant ultérieurement. Cette option ne nécessite ni javascript ni état de session.

12
Ben Mills

Faites en sorte que les différents panneaux soient tous côté client ... tous sous la même forme ... et lorsque le bouton d'envoi final est enfoncé, vous pouvez publier toutes les valeurs en même temps.

4
Joel Martinez

Si vous ne pouvez pas utiliser Javascript et ne souhaitez pas dépenser les ressources du serveur avec des variables de session, vous pouvez également sérialiser et désérialiser les valeurs entrées dans les différentes étapes, et les transmettre dans les deux sens à l'aide d'un champ de saisie masqué. Un peu comme ViewState dans les formulaires Web ASP.NET.

3
rodbv

J'ai mis en place un assistant de connexion et documenté les idées derrière sur mon blog si cela aide: texte du lien

2
Piers Lawson

Il existe une méthode très simple, flexible et extensible dans cette question: Comment simplifier mes dialogues modaux entrelacés avec état dans ASP.NET MVC

1
soflexible557

Vous pouvez utiliser le composant simple MVCWizard.Wizard disponible sur NuGet. Le WizardController vous permet de créer un assistant à l'aide d'une vue partielle. Il y a aussi l'AutoWizardController qui rend l'assistant entier dans une seule vue. Tous ces composants fonctionnent avec la session pour stocker l'état du modèle.

1
Max Zerbini