Question

Je suis en train d'apprendre le nouveau cadre ASP .NET MVC et je voudrais savoir la meilleure pratique pour l'utilisation UserControls.

Je comprends que vous pouvez rendre des années UserControl en tant que partielle et transmettre des données à partir d'un contrôleur eux. Idéalement, je pense qu'il est logique de ne pas avoir un code behind car cela crée une tentation de briser les règles MVC.

Je vais vous donner un exemple où je ne comprends pas comment UserControls adapter à l'ensemble.

  

J'ai un UserControl qui montre la   Derniers tags (un peu comme sur   StackOverflow). Contrairement à StackOverflow I   voulez afficher cette UserControl sur   toutes mes pages. Si j'ai   contrôleur dire QuestionController   qui est destiné à gérer les actions de   quelques vues sur la question par exemple vue et   détail, cela signifie que je dois chercher   les données dans le QuestionController et   puis passer à l'UserControl?

     

Si je crée un autre contrôleur dire   SearchController je alors à   reproduire la même fonctionnalité   obtenir les dernières balises de passer à un   nouveau partielle. Ne pas dire que   les 2 contrôleurs différents font   choses supplémentaires qu'ils n'étaient pas   à l'origine destiné à faire?

Était-ce utile?

La solution

Si votre UserControl apparaît sur chaque page, puis une façon d'aborder ce serait d'utiliser un contrôleur de base à partir de laquelle tous vos contrôleurs tirent et générer le ViewData pour le UserControl en remplaçant la méthode OnActionExecuting et mettre là la logique. Si votre UserControl est moins répandu, mais souvent utilisé dans le site, vous pouvez étendre ActionFilterAttribute et votre filtre générer les données nécessaires. Cet attribut peut être utilisé pour décorer les contrôleurs ou les actions qui génèrent des vues qui utilisent le UserControl.

Je suppose dans tout cela que les données pour l'UserControl est indépendante de l'action invoquée. S'il y a une dépendance, il est probablement préférable de pousser la logique dans une classe (ou classes, en utilisant peut-être la stratégie) et de faire la génération des données explicites dans chaque action ou contrôleur (via OnActionExecuting remplaçant).

Autres conseils

Sinon, avec ASP.NET MVC 2, vous pouvez maintenant utiliser RenderAction pour appeler une toute nouvelle action du contrôleur qui peut récupérer les données. Cela rend votre code beaucoup plus modulaire et il est plus clair où les données proviennent de.

Vous pouvez également envisager de mettre vos classes de modèle dans une hiérarchie. La classe supérieure (ou l'une des classes supérieures) contiendront les données nécessaires pour vos contrôles utilisateur envahissants. Ensuite, vous pouvez charger ces données habituellement utilisées dans une classe de contrôleur de base.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top