10
votes

Structuration des formulaires Web complexes dans ASP.NET MVC

Quelle est une bonne approche dans ASP.NET MVC pour la mise en œuvre d'une forme complexe où les sections du formulaire sont affichées et cachées en fonction des intrants d'un utilisateur?

Mon arrière-plan est dans Webforms. Je suis fréquemment demandé de construire des formulaires dans lesquels un utilisateur sélectionne une option dans une liste déroulante, déclenchant une poignée de nouveaux champs à apparaître. Une sélection différente pourrait provoquer une apparition d'un ensemble différent de champs.

Dans le passé, je gérerais ce scénario via un updatebanel et un panneau Wrapper autour des champs que je veux montrer ou masquer. La validation est automatiquement désactivée lorsque les champs sont cachés.

à l'avenir, j'aimerais utiliser la validation du modèle d'attributs d'Attribute de MVC, mais est-il possible de rendre la validation conditionnelle sur les valeurs d'autres propriétés?

Aussi, comment puis-je gérer la bascule de blocs de champs de formulaire? Je sais comment le faire manuellement dans JQuery, mais j'espère qu'il y a une approche qui passe avec la validation et le code côté serveur.

J'aimerais que MVC soit beaucoup mieux globalement, mais je n'ai pas très bien compris comment gérer ce type de scénario. Probablement j'ai juste besoin de changer ma pensée pour mieux s'adapter à l'approche MVC.


0 commentaires

4 Réponses :


0
votes

Les formes Web ASP.NET traditionnelles ont beaucoup de "magie" pour vous, tandis que vous devez être conscient du travail qui consiste à créer la "magie" dans ASP.NET MVC. La prestation est qu'avec MVC, vous avez plus de contrôle sur ce qui se passe, qui peut également améliorer les performances.

in ASP.NET WebForms Un UPDOWPANEL est utilisé pour les appels AJAX. Si vous avez besoin de vous rendre au serveur de manière asynchrone (sans récupérer complet), utilisez Ajax via JQuery. Voir ci-dessous par exemple: p>

            $.ajax({
                    type: "get",
                    url: "/YourController/YourAction",
                    success: function (obj) {
                       //any logic you want to do upon success
                    }
                });


0 commentaires

1
votes

Je sais que cela pourrait ne pas être la réponse que vous recherchez, mais je ne pense personnellement pas que les formes complexes sont très conviviales en premier lieu et j'essaie toujours de les diviser en formes plus simples dans la mesure du possible, ou de Simplifier le formulaire. J'ai rencontré de nombreuses formes dans des sites Web où il y a un radeau de «champs» où il devrait vraiment y avoir quelques questions à répondre à l'utilisateur. SIMPLETUN SIPS qui atteint le point de ce qu'ils veulent réaliser plutôt que les valeurs de terrain, ainsi que de nombreuses connaissances spécifiques à appliquer nécessaires pour définir ces champs aux bonnes valeurs.

Si vous voulez toujours aller de l'avant avec une forme complexe, alors que les autres réponses ont déjà été énoncées, les installations fournies par MVC pour le faire, mais il n'y a pas de manière arrête. Donc, c'est à vous de comprendre ce qui fonctionnera le mieux pour vos utilisateurs.


0 commentaires

0
votes

En raison de la façon dont MVC fonctionne contrairement aux webforms, vous êtes bloqué avec la responsabilité de penser vraiment à ce qui se passe sur le client et que ce qui se passe sur le serveur séparément, car pas beaucoup de métadonnées ne sont pas transmises à donner États-Unis que le sentiment de webformes heureux.

Cependant, il existe une notion lors de l'utilisation des bibliothèques d'AJAX intégrées lorsque vous rendantez un formulaire que vous pouvez l'avoir automatique une mise à jour une fois qu'elle est affichée. En un sens, cela vous permet d'économiser le JavaScript / JQuery, car il "Fils auto-inconditionnels" est similaire-ish à un panneau. De cette manière, vous pouvez potentiellement regarder progressivement rendre vos formes complexes du serveur à mesure que chaque section est éditée, etc.

voir msdn: http://msdn.microsoft.com/en-us/library/system.web.mvc.ajax.ajaxoptions .updatettargetid.aspx

L'exemple de code correspondant pour vous donner une idée (malheureusement, ce n'est pas dans la syntaxe de rasoir plus lisible):

La ligne correspondante est l'AJAX .Beginform où la balise de formulaire est rendue. Une fois que le formulaire est affiché, la bibliothèque MS Ajax mettra à jour automatique l'élément spécifié dans "UpdateTeTargetid" spécifié dans le formulaire Ajaxoptions. Dans ce cas, la réponse sera placée dans l'élément de la plage "textentred" lors de la réponse du serveur. Ici, vous pouvez progressivement rendre plus de contenu à l'utilisateur à remplir, peut-être une autre forme, etc. xxx


0 commentaires

1
votes

josh,

La première chose que je suggère est de vous assurer d'utiliser des images de vue pour les pages qui sont compliquées. Un mode de vue est fondamentalement un modèle que vous créez pour une vue spécifique; Par exemple, une vue de vue pourrait être une composition d'autres classes.

Quant à la modification de manière dynamique des champs à votre vue, le meilleur moyen est d'utiliser JQuery (ou toute autre bibliothèque JavaScript) pour le faire.

J'ai aussi migré d'un environnement de formulaire Web et je sais qu'il est difficile de changer d'engrenages au début, mais croyez-moi, faites-moi un simple gestionnaire de jQuery est beaucoup plus simple que de devoir mettre en place un panneau de commande, puis les gestionnaires d'événements .

Sans parler de cela est beaucoup plus efficace; Les panneaux de mise à jour sont après tout faire des postes partiels sur la page, parfois, avec JQuery, vous n'avez même pas besoin de le faire.

Après quelques projets avec MVC, je trouve désormais maintenant que cela prend du temps pour aller et faire les panneaux de mise à jour sur les formulaires Web;)

J'espère que cela aide, -Covo


0 commentaires