UserControl équivalent dans MVC3?
Sur des Formulaires Web, nous avons UserControls
. Ces contrôles ont un code-behind et peut être utilisé dans différents projets/solutions et non pas en fonction sur d'autres choses.
Je veux créer un contrôle qui rend certains contrôles et aurait quelques liens qui serait "le déclenchement d'un événement". Je leur en veut pas pour être fixé sur mon site, je veux être en mesure d'utiliser le même "contrôle" sur un autre site. Quel est l'équivalent en MVC? Est-il possible de créer une vue avec un contrôleur et utiliser la DLL ailleurs?
Vous devez vous connecter pour publier un commentaire.
Le plus fonctionnel équivalent à des WebForms-style réutilisables contrôles utilisateur dans MVC, html helpers. Un helper html est une méthode qui retourne du balisage. L'approche recommandée consiste à les mettre en œuvre sous la forme de méthodes d'extension hors
HtmlHelper
ou une autre propriété d'un MVC page:Vous pouvez ajouter cette méthode pour votre projet MVC directement ou vous pouvez l'ajouter à une autre bibliothèque de classe. La seule chose que la bibliothèque de classe doit de référence est System.Web.Mvc.dll pour le
HtmlHelper
de référence (il peut aussi avoir besoin d'System.Web.dll si vous utilisez plusieurs types).Vous l'habitude de les appeler à partir de votre vue comme (cet exemple utilise la syntaxe Razor qui est nouveau dans MVC 3)
Alors que superficiellement html helpers émettent balisage tout comme les Contrôles de l'Utilisateur, il existe des différences importantes. La plus importante est que le MVC points de vue n'ont pas le concept de la WebForms page de cycle de vie. Cela signifie que, contrairement aux commandes de l'utilisateur, html helpers sont rendus en un seul passage. Il n'y a pas plusieurs phases comme Init, de Charge, de Rendu, etc dans les Formulaires web où vous pouvez brancher des événements côté serveur pour interagir avec d'autres contrôles de la page.
Selon ce spécifique types d'événements dont vous parlez, il pourrait être approprié MVC centrée sur les techniques à résoudre votre tâche. Pourriez-vous fournir plus de détails sur ce que vous voulez faire? Html helpers peut être assez puissant. Par exemple, le construit en MVC contrôles de saisie comme
TextBoxFor
pouvez brancher jusqu'à la validation côté client etc.Depuis les "événements" n'existent pas dans le même sens MVC comme ils le font dans les formes de web, répondre à toutes vos exigences seront assez délicat.
Pour la couche d'INTERFACE utilisateur de l'objet UserControl équivalent, vous devez utiliser un PartialView, probablement situé dans le Views/Shared/dossier de Modèles en fonction de si vous voulez qu'il soit associé à un certain type de Modèle ou pas.
Pour le back-end ("événement"), vous devriez probablement mettre en œuvre un Contrôleur, vous pouvez envoyer la demande à partir de vos liens, et qui prend en charge tous les comportements dont vous avez besoin.
Utilisation de ces fonctions dans les différents projets, vous devez ensuite copier le contrôleur et le modèle/vue partielle. Certes, il pourrait ne pas être aussi simple à ré-utiliser comme un do-it-all de contrôle de l'utilisateur à partir de Formulaires web, mais c'est une limitation qui vient avec une claire séparation des préoccupations, et qui figurerait dans une est bien conçue, la couche à base de Formulaires web application.
Mise à jour en réponse à un commentaire sur la "limitation" de la séparation des préoccupations que j'ai mentionné:
Le contrôleur peut bien sûr être distribué dans un ensemble distinct, avec son propre montage d'essai etc. Cependant, y compris le contrôleur de l'assemblée (ou ensembles) et la vue partielle/modèle avec le frontal code est sans doute une chose à faire (peut-être ne parviennent pas à le faire) que de la simple copie d'un contrôle utilisateur avec code-behind (qui sont stockés les uns à côté des autres).