Suite à la session que j'ai eu le plaisir d'animer lors des TechDays 2011 de Genève, vous retrouverez ici toutes les sources du projet de démonstration sous forme de solution Visual Studio 2010 ainsi que quelques explications sur celui ci.
La présentation PowerPoint
La présentation PowerPoint est disponible sur SlideShare:
Les nouveautés de asp.net mvc 3
La vidéo de la session
La vidéo de la session est disponible sur Channel 9 :
La solution de démonstration
La solution est téléchargeable ici. Je suis obligé de vous fournir quelques explications sur ces sources afin de les comprendre au mieux. L'archive contient deux dossier : Demo et NuGet.
NuGet
Le dossier NuGet correspond à une démonstration suivant l'article publié précédemment : Créez votre premier package NuGet. Je vous renvoie donc vers la lecture de celui ci.
Demo
Le dossier Demo contient la solution Visual Studio 2010 utilisé lors de la présentation. Vous pouvez immédiatemment compiler et lancer l'application sans avoir de modification ou de configuration à effectuer.
L'application est découpée suivant le déroulement de la session:
- Le moteur de vue Razor
- Améliorations des contrôleurs
- Améliorations JavaScript & AJAX
- Améliorations de la validation des données
- L'injection de dépendances
- Autres nouveautés
Le moteur de vue Razor
Cette section de l'application représente la première partie de la session qui à été expliquée sur le PowerPoint. Vous pouvez suivre au travers de tous ces liens les différent exemples présentés. Toutes les vues se situent dans les dossiers :
- ~/Views/Razor
- ~/Views/RazorLayout
- ~/Views/Shared
Rien de spécifique à noter au niveau du contrôleur.
Améliorations des contrôleurs
Cette section a été complètement expliquée au travers de démonstrations lors de la session. Vous retrouverez les filtres d'action globaux, la propriété ViewBag et les nouveaux types dérivés de ActionResult. Les points clefs de ces démonstration se situe au sein de la solution dans les fichiers :
- ~/Global.asax.cs (méthode RegisterGlobalFilters)
- ~/Filters/SampleAttribute.cs
- ~/Controllers/ControllerImprovementsController.cs
Pour les vues de cette section, vous les trouverez sous :
- ~/Views/ControllerImprovements.
Améliorations JavaScript & AJAX
Cette section a été présentée dans le PowerPoint. Les vues concernés ce situents sous :
- ~/Views/JavaScriptImprovements
- ~/Controllers/JavaScriptImprovementsController.cs
Pour bien comprendre cette exemple, il faut annalyser le code source des deux exemples pour voir que lorsque la fonctionnalités UnobtrusiveJavaScript est désactivée, on a une portion de JavaScript dans le code source de la page.
Améliorations de la validation des données
Cette section concerne les exemples sur l'interface IValidatableObject, les attributs de validation et L'attributs AdditionalMetadata. Ils ont fait l'objet de démonstration lors de la session pour les deux premiers et d'une présentation PowerPoint pour le dernier. Vous pouvez retrouvez les sources concernés dans les vues situées sous :
- ~/Views/ValidationImprovements
- ~/Controllers/ValidationImprovementsController.cs
- ~/Models/SessionModel.cs
- ~/Models/TrackModels.cs.
Vous pouvez également consulter l'article L'interface IValidatableObject.
L'injection de dépendances
Là encore, cette section a été détaillée lors de la présentation. Les points clefs se situent dans la solution dans les fichiers :
- ~/Classes/IMessageService.cs
- ~/Classes/MessageService.cs
- ~/Classes/SampleDependencyResolver.cs
- ~/Controllers/DependencyInjectionController.cs
- ~/Global.asax.cs
Autres nouveautés
Cette section n'a été abordées que brievement lors de la session et pourtant derrière chacuns des points, il y a une démonstration.
Cache partiel des pages
Les fichiers clefs de cette démonstration sont :
- ~/Controllers/OtherController.cs (méthodes GetDateTime et GetCacheDateTime)
- ~/Views/Other/CurrentDateTime.cshtml
- ~/Views/Other/Sample01.cshtml
Cette démonstration avait pour but de présenter comment mettre en oeuvre le cache partiel des pages au sein des vues. La vue principale de l'exemple (Sample01.cshtml) présente le rendu de deux actions (GetDateTime et GetCacheDateTime). La première est la date non cachée et la seconde est la date cachée. En rechargeant la vue, seule la première date est mise à jour. Ces deux actions renvoie la sous vue CurrentDateTime.cshtml qui n'affiche que la dateet heure courante.
Au niveau du contrôleur (OtherController.cs), l'action GetCacheDateTime est marquée avec l'attribut OutputCache qui permet de spécifier que le rendu de celle ci doit être mis en cache. On peut ajouter les paramètres Duration pour spécifier la durée du cache en secondes et VaryByParam avec le nom d'un paramètre permettant de spécifier qu'une version du cache sera conservé en fonction de la valeur de ce paramètre.
Les contrôleurs sans session
Les fichiers clefs de cette démonstration sont :
- ~/Controllers/OtherSessionEnabledController.cs
- ~/Controllers/OtherSessionDisabledController.cs
- ~/Views/OtherSessionEnabled/Index.cshtml
- ~/Views/OtherSessionDisabled/Index.cshtml
Le but de cette démonstration était de présenter l'attribut SessionState et la possibilité de l'utiliser pour désactiver la session sur un contrôleur. La variable de session empêche l'exécution en parrallèle de plusieurs actions sur un contrôleur. Cela signifie que les différentes requêtes sont traités de manière séquentielles, les unes après les autres. C'est gênant si votre vue comporte de multiples appels ajax par exemple. C'est pourquoi on peut désactiver l'état de session et pouvoir faire des appels en parallèle à notre contrôleur.
Les deux contrôleurs OtherSessionEnabledController.cs et OtherSessionDisabledController.cs effectuent exactement les mêmes instructions. Le contrôleur OtherSessionDisabledController.cs est marqué avec l'attribut SessionState qui désactive l'état de session. En chargeant les vues dans le navigateur, la vue ~/Views/OtherSessionDisabled/Index.cshtml engendre une erreur lors de la tentative d'accès à la variable de session. Cela démontre que celle ci n'est pas seulement désactivée mais qu'elle est totalement inexistante puisque sa valeur est null.
Vous pouvez naviguer entre les deux exemples pour remarquer que la session n'est pas perdue lorsque vous passez sur un contrôleur dont l'état de session est désactivé puis que vous vous revenez sur l'un dont l'état de session est actif.
Support JSON
Cette section a fait l'objet d'un article sur mon blog : Support des liaisons JSON. Je vous invite donc à le consulter, l'exemple étant basé sur cette démonstration.
Les fichiers clefs de cette démonstration sont :
- ~/Controllers/OtherController.cs (méthode SendTrack)
- ~/Views/Other/Sample03.cshtml
Helper Twitter
Cette démonstration avait pour but de montrer la faciliter de mise en place d'une timeline Twitter après l'intégration du package Twitter.Helper via NuGet.
Les fichiers clefs de cette démonstration sont :
- ~/Controllers/OtherController.cs (méthode Sample04)
- ~/App_Code/TwitterGoodies.cshtml (ajouté par le package Twitter.Helper)
- ~/Views/Other/Sample04.cshtml
La mise en oeuvre est simple puisqu'il suffit d'appeler la méthode TwitterGoodies.Profile dans la vue avec en paramètre le nom du compte twitter pour en afficher la timeline.
Ce helper Twitter fournit par Microsoft comporte de nombreuses méthodes et surcharges.
NuGet
Comme précisé plus haut, cette démonstration a fait l'objet d'un article sur mon blog : Créez votre premier package NuGet. Je vous renvoie donc à nouveau vers la lecture de celui ci. Les fichiers clefs de cette démonstration se trouve à la racine de l'archive sous le dossier NuGet.
Références
Un dernier point que j'ai oublié lors de la session est la liste des références pour approfondir MVC 3. En voici une liste non exhaustive :