ASP.NET MVC : comment fournir les donnees depuis le controleur

Voici une question qui revient régulièrement lorsque j’interviens sur des projets.

En avant-propos, vous trouverez ici l’article de la msdn qui présente partiellement le problème. Ce qu’il faut retenir :

  • besoin d’afficher une vue liée à une classe du modèle ? une vue fortement typée vous apportera de la productivité via la complétion. La compilation des vues, si vous l’activez, vous apportera de la sérénité dans le refactoring. Les étapes :
    • définir une action du contrôleur qui récupère une instance de la classe du modèle cible et qui transfère cette instance à la vue. On peut utiliser par exemple la méthode View(object). L’objet passé en paramètre correspond à l’instance du modèle.
    • définir une vue fortement typée. Généralement, on utilise la directive  @model dans la vue Razor pour définir le type du modèle qui sera utilisé. Cette instruction permet d’utiliser la propriété WebViewPage.Model et d’avoir la complétion (WebViewPage<T> est un générique).
  • besoin d’afficher une vue générique, non liée à une classe du modèle ? une vue faiblement typée apportera simplicité (moins de classe) et/ou dynamicité (possibilité de fournir à la vue des données issues d’une introspection). Les options :
    • utilisation du dictionnaire de données WebViewPage.ViewData. Il s’agit d’un dictionnaire dans lequel les données sont identifiées par une clé de type « magic string ».
    • utilisation du type dynamic avec la propriété WebViewPage.ViewBag. Ce principe a pour conséquence d’alléger la syntaxe  du dictionnaire.

Techniquement il est possible de mixer les approches (vue fortement typée + vue faiblement typée), mais n’est-ce pas le reflet d’un problème de conception ?

http://msdn.microsoft.com/fr-fr/library/dd394711%28v=VS.98%29.aspx

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *