J'ai commencé à utiliser MVC de manière récurrente, et une chose qui me vient à l'esprit est de savoir s'il est possible que le concept d'un contrôle existe dans MVC? D'après ce que je vois le cadre permet à l'application d'être bien factorisée en modèles, vues et contrôleurs, mais je ne peux pas penser à une bonne façon de prendre une tranche verticale de cette application et de la réutiliser dans une autre application . Ce que je veux dire par là, c'est que je suis frappé par le fait que les composants UI que je construis avec MVC ne sont pas très faciles à réutiliser, de la même manière que vous pouvez réutiliser un Contol dans ASP.NET WebForms. Ok, il y a des HTML Helpers mais je pense à quelque chose de plus modulaire. Quelque chose de plus comme le modèle de contrôle dans WPF. Est-ce que cette dichotomie va au cœur de MVC par rapport à WebForms, ou est-ce que les composants UI réutilisables peuvent fonctionner dans un monde MVC?Le concept de contrôle a-t-il un sens dans MVC?
Répondre
Vous pouvez toujours utiliser les fichiers ascx
et d'autres fonctionnalités dans ASP.NET Web Forms. La seule pièce manquante dans MVC est le modèle de publication et la gestion d'état orientée état de vue. Il n'y a plus de <form runat="server">
et pas de champs cachés générés automatiquement. Sauf ceux-ci, toutes les autres fonctionnalités peuvent être utilisées dans ASP.NET MVC. Vous pouvez toujours écrire des contrôles qui publient des données à l'aide d'un mécanisme basé sur REST et les utiliser dans vos vues. Donc, oui, tant que vos contrôles ne reposent pas sur un formulaire côté serveur pour la publication, vous pouvez les utiliser exactement comme vous le feriez dans ASP.NET Web Forms.
Je suppose qu'il est plus difficile dans MVC d'encapsuler complètement le rendu et de gérer le post-traitement dans un seul contrôle que vous venez de déposer sur une page. C'est d'une certaine manière parce que ASP.NET Webforms est très abstrait à partir de la sémantique HTTP et que l'abstraction est un cadre où il est possible de créer des contrôles utilisateur réutilisables. ASP.NET MVC ne dispose pas de l'abstraction des formulaires Web, vous pouvez donc contrôler les messages de trois contrôleurs différents. Bien qu'il puisse sembler que vous perdiez des contrôles faciles à utiliser lorsque vous passez à ASP.NET MVC, je pense que vous avez un meilleur cadre pour séparer et réutiliser la logique de domaine.
Dans ASP.NET MVC, vous avez des vues partielles qui peuvent être réutilisées. Rob Conery a un bon poste à ce sujet: ASP.NET MVC: Using UserControls Usefully
Lien très intéressant. Je me demande si l'utilisation de bits de la bibliothèque WebForms (UserControl dans ce cas) dans votre application MVC est de toute façon préjudiciable. Ne semble pas si "pure"? – Schneider
Je ne voudrais pas déranger, je ne pense tout simplement pas que les contrôles webform offrent autant de valeur dans MVC. Je vais avec les partiels. – tarn
Je cherchais la même chose - pour les widgets réutilisables avec leurs propres chemins de données et trouvé sur le blog de Steve Sanderson:
http://blog.codeville.net/2008/10/14/partial-requests-in-aspnet-mvc/
De l'article :
"Vous avez entendu parler des vues partielles, alors qu'en est-il des demandes partielles? Dans toute requête MVC, vous pouvez configurer une collection de demandes partielles internes, chacune pouvant configurer ses propres requêtes partielles internes, etc. Chaque demande partielle rend une simple méthamphétamine od dans n'importe lequel de vos contrôleurs réguliers, et chacun peut produire un widget indépendant. "
Cet article offre respectueusement une alternative à la stratégie Sub Controller du groupe MVC Contrib (http://www.mvccontrib.org/) qui est également une solution pour ce que vous cherchez.
Je pense que la chose la plus proche que vous obtiendrez à un ancien contrôle de l'école sont des vues partielles, ce sont effectivement des balisages partagés que vous pouvez déposer sur n'importe quelle page. Cependant, ils n'ont pas leurs propres contrôleurs prêts à l'emploi, de sorte que le code pour alimenter le composant d'interface utilisateur partagé (la vue partielle) doit exister dans le contrôleur de chaque page qui l'a utilisé.Il existe des moyens de réduire la duplication de code mais sans mettre en œuvre des contrôleurs de vue partielle et de liaison, je ne pense pas qu'il existe un moyen de contourner complètement le problème.
Donc à peu près ce que @tarn a dit en fait lol –
je voulais dire cette question plus conceptuellement ... pas "puis-je utiliser des contrôles dans MVC" ... plus "est-il un moyen de partager l'interface utilisateur/autres composants à travers de nombreux projets MVC" – Schneider