Je dois construire quelques vues partielles ascx dans mes applications MVC pour encapsuler des fonctionnalités réutilisables ainsi qu'archiver SOR et SOC. Cependant, j'ai rencontré défi comment encapsuler la logique métier qui conduit les vues MVC ascx.MVC: Comment encapsuler la logique dans MVC ascx vue partielle avec la même efficacité des contrôles ascx webforms?
Dans les formulaires Web, le code d'un contrôle ASCX peut gérer un événement de clic de bouton et le navigateur affiche toujours la même page avec une seule publication. Comment puis-je archiver la même chose dans MVC? Quand ~/Address/Edit/2 inclut une vue ascx partielle avec un bouton qui appelle une autre action MVC - disons ~/ShareController/CommonAction - quel est le meilleur moyen pour que CommonAction retourne à la même vue qui inclut le fichier ascx? Peut-être qu'il me manque un modèle commun dans le développement Web MVC?
Merci,
Max
Mise à jour: Voici une description plus sur le modèle que je cherche:
La vue partielle censé être un éditeur d'adresses. Il peut valider l'adresse, afficher les erreurs de validation et sauvegarder les informations dans la base de données.
L'éditeur d'adresse va s'asseoir sur de nombreuses pages avec différentes commandes/actions.
Dans un formulaire Web classique, un contrôle ascx peut parfaitement interagir avec l'utilisateur par lui-même via de nombreuses publications sans modifier l'URL qui perturbe le processus de page global. Quel est le bon modèle pour le scénario similaire dans MVC?
Mise à jour 2:
Je ne sais pas que cela n'a rien à voir avec le statefullness de formulaire en ligne. Fonctionnalité totalement différente. Il s'agit d'un contrôleur qui appelle un autre sous-contrôleur (ou contrôleur enfant) pour gérer une vue partielle. Voyez mon exemple à la fin de ce commentaire. Je veux juste atteindre le même niveau d'encapsulation et de séparation d'inquiétude. Si le framework MVC n'a pas ça, c'est une faiblesse sérieuse.
Dans MVC, comment pourrions-nous avoir une "chose" (ou une vue partielle faute de meilleure alternative) capable de gérer la présentation ainsi que la logique et de résider dans une autre page parent sans interférer? D'après ce que je comprends, les vues partielles dans MVC sont juste une présentation qui ne peut pas avoir un contrôleur dédié sans interférer avec le contrôleur principal. J'espère que je me suis trompé
Pour vous donner un autre exemple, considérez cette page que vous lisez "stackoverflow.com/questions/{id". Il inclut un composant "Ajouter un commentaire". Le commentaire d'ajout peut effectuer une validation côté serveur pour empêcher les commentaires non valides. Comment pouvez-vous créer un composant "Ajouter un commentaire" de bout en bout pouvant résider sur n'importe quelle page et gérer la logique de contrôleur nécessaire? La seule façon que je peux penser est de modifier le contrôleur de la page d'accueil pour pouvoir donner des messages de validation d'utilisateur et leur demander de corriger les erreurs par la poste. Cela signifie que vous ajoutez le composant à 10 pages différentes, vous devez modifier 10 contrôleurs différents. Cela tue "DRY"
JE VEUX QUE J'AI FAUT! parce que j'aime MVC sofar.
Conclusion:
Je marqué la réponse de Kenny comme la réponse; cependant, je considérerais ceci comme une faiblesse sérieuse du cadre MVC du point de vue de l'encapsulation, de la réutilisabilité et du principe DRY. Mon opinion n'a rien à voir avec l'état de forme des webforms.
S'il vous plaît, permettez-moi d'expliquer:
En webforms, vous pouvez 100% encapsuler une fonctionnalité complexe dans un contrôle ascx et des DLL Classlib liées au cours. Un (1) développeur peut passer des semaines à le développer. Une fois son travail terminé, personne n'a besoin de savoir quoi que ce soit et de l'utiliser. Le contrôle de l'utilisateur peut être réutilisé sur de nombreuses pages sans déranger les autres "développeurs" avec les activités de détail qui ont lieu dans le composant ascx.
En revanche, vous ne pouvez jamais obtenir la même chose avec ASP.NET MVC où l'ascx partial doit interagir avec l'utilisateur. Une fois que l'ascx a besoin d'interagir, il a besoin de son propre contrôleur et le contrôleur doit conserver le ModelState.
Jeremy Skinner a présenté le [ModelStateToTempData] dans MvcContrib: http://www.jeremyskinner.co.uk/2008/10/18/storing-modelstate-in-tempdata-with-aspnet-mvc/ Cependant, cela est juste un patch. Un bon framework devrait permettre au développeur d'encapsuler à 100% son travail - dans un contrôle, partiel, asc ou quoi que ce soit - et l'avoir au reste de l'équipe pour qu'ils puissent «l'utiliser» sans connaître aucune donnée. Winform fournit parfaitement cela dans de nombreux scénarios complexes.
Tout bienvenu.
Quelle est la vue partielle utilisée dans votre scénario spécifique? Quel est le but du bouton clic? –
Salut Jeff, Juste ajouté plus de commentaires. Merci. – DevTeach2010