Importantes évolutions que nous délivre l'équipe ASP.NET lors de la Build Conference , plusieurs Developper Preview pour ASP.NET :
Mais aussi pour Visual Studio 2011, et le Framework .NET 4.5.
Modernisation des templates, nouvelles intégration de librairies client-side, nouvelles fonctionnalités … C’est ce qui vous attend avec cette nouvelle évolution de ASP.NET MVC 4.
Les évolutions concernant ASP.NET 4.5 Core et Runtime seront abordées dans un prochain post.
Voyons donc plus en détails les premiers changements pour MVC4 et Webpages 2.0.
Téléchargement de MVC4 :
Vous trouverez cette Developper Preview ici.
Premier pas : Ajout d'un type d'application Web
Après installation, commençons par nous créer une nouvelle application Web. On remarque l'arrivée du type d'application Web MVC4.

Un fois sélectionné, nous arrivons sur le choix du Template d'application web.
Nouveaux templates de projets MVC :
On remarque également ici, l'arrivée d'un nouveau Template d'application web pour Mobile. Celui-ci intègre directement un Template de projet utilisant JQuery.Mobile par défaut, avec un thème de base. Nous y reviendrons plus loin dans l'article.
- Nouveau Template de projet pour Mobile
- Evolution des Templates existants
Créons dans un premier temps, une internet application. Celle-ci sera obligatoirement HTML5 compliant ( Principalement : les nouveaux markups seront présents dans votre layout, ainsi qu’une intégration a base de CSS3).
Pas de changement des moteurs de vues, toujours le moteur ASPX et RAZOR.

Evolution du skin de base des applications Web ASP.NET :
Surprise ! Le Template par défaut des applications Web à évolué !

On remarque rapidement, l'arrivée de JQueryUI dans ce template, notamment pour le formulaire de Login, mais aussi d'enregistrement :
JQueryUI est une librairie JS, à base de JQuery, fournissant des composants d'interfaces interactifs (Datepicker, Dialog, etc..). Celle-ci était déjà présente lors des derniers ToolsUpdates MVC3, mais non utilisé dans les Template de bases.
Register :

Login :

Template de base compatible Mobile
Par défaut, votre site généré adapte le rendu de sa disposition en fonction de la taille du navigateur. Ici nous ne parlons pas du Template de projet Mobile.
Petit coup d'œil à la feuille CSS , Les Templates de base ( Internet application et Intranet application) contiennent un style compatible Mobile :
Une Media Query CSS3 adaptant le rendu de la page (Adaptative Rendering ) par rapport à la résolution de navigation , ici le déclencheur si la Width inférieure ou supérieure à 850px :

Ce qui donne si on modifie la taille du navigateur :


Nouveau Template de projet Mobile
Un nouveau Template de projet fait place parmi les Templates de projets MVC : Mobile Application.
Celui-ci permet de créer une web application, spécifique pour mobile et tablettes, à base de JQuery Mobile, une librairie Javascript à base de JQuery, et JQuery UI.
JQuery Mobile est plus un Web Framework, facilitant le développement d’application web sur plateformes mobiles, en fournissant de nombreux outils, et unifiant une interface utilisateur à travers toutes les plateformes. Cette libraire gère également le Progressive Enhancement, qui consiste à garder la même expérience utilisateur, selon les différentes versions du browser.
Cette librairie est notamment utilisée sur les principales plateformes mobiles actuelles :

Créons maintenant une web application pour mobile :

Une fois crée, nous obtenons une interface épurée, totalement compatible Mobile, avec fonctionnalité facile d’accès “Touch”, validation universelle, intégration dynamique :



N.B : Pour tester votre nouveau site Mobile, vous pouvez utilisez le Windows Phone Emulator (Requière le Windows phone SDK).
N.B : Tutoriel sur la création d’une application Mobile en MVC4 : ici.
Le site généré est sur la même base que les autres Templates de projets (Controllers, librairies disponibles, Attributs) , uniquement le skin diffère.
Regardons le layout :

Viewport : Présence par défaut du Viewport, qui va nous permettre, de fixer idéalement notre taille d’intégration par rapport à la taille de la device. Sans ce meta tag, la taille de la device, ne serait pas adaptée à l’intégration, provoquant l’utilisateur à zoomer, pour avoir une taille ajustée.
Gestion des browser : Desktop / Mobile
Cette version de MVC 4, en plus de proposer un nouveau Template pour Mobile, nous permet également de pouvoir aisément sélectionner quelles vues doivent être utilisées pour quels browser, grâce au Display Modes.
Les Displays Modes permettent de préfixer les vues ou partial vues, par rapport au type de devices / browser consommant la page web : ViewName.Mobile.cshtml ou mobile est soit le nom du display Mode, soit Mobile pour cibler toutes devices “IsMobile”.
Par exemple : nous avons une vue Index.cshtml, qui est utilisée par défaut. Nous voulons en avoir une version universelle pour mobile, il nous suffit alors de créer une vue : Index.Mobile.cshtml.
Cependant, nous remarquons que cette vue universelle, n’est pas si universelle que cela, sur un Mobile IE6, l’expérience utilisateur est différente. Nous allons donc créer une vue spécifique pour Mobile IE6 , mais nous voulons rester transparent par rapport au mécanisme de switch.
Il va falloir créer un Display Mode :

Ce display mode, à pour nom “MSIEMobile6”, détectant si le browser, est une device mobile, et si le browser est de type MSIE Mobile 6.
Lorsque une device se connectera à l’aide d’un IE6 Mobile, alors le display mode sera “MSIEMobile6”. De cette façon, nous pouvons créer une autre vue Index.MSIEMobile6.cshtml. Celle-ci ne sera utilisée uniquement lorsque le display mode sera MSIEMobile6.
Le display mode étant créé, il faut qu’au démarrage de l’application, celui-ci soit enregistré. Plaçons donc cette méthode dans le Global.asax, qui elle-même sera appellée dans le ApplicationStart.

System.Web.MVC 4.0.0
Du coté des entrailles , on remarque la nouvelle Web.MVC 4.0 présente :
Nouvelles librairies client-side
Nouvelles librairies présentes dans le layout du template de base :
JQuery 1.6, et JQuery UI étant arrivés avec la dernière ToolsUpdate de MVC3 ; On remarque une version de développement de Modernizr, (une librairie de Features Detecting HTML5).
Pour rappel, JQuery est une librairie Framework Javascript, proposant de nombreux outils de développement ( Helpers, Selecteurs etc..).
AjaxLogin.js, qui, comment son nom l’indique, va permettre de se loguer en Ajax ( par défaut, le formulaire de login utilisant JQueryUI, le login requiert un appel Ajax).
Concernant le package de libraires fourni,

Arrivé de KnockoutJS, en beta : une librairie JS de Templating vraiment pas mal, comme l’on peut voir avec JQuery Template, se rapprochant d’un MVVM, ou encore en facilitant grandement le binding dynamique client-side.
Scripts manager
Nouvelle fonctionnalité de Webpages 2, le ressource Manager.


Celui-ci va permettre d’ajouter des références Javascript, à partir du server-side ( par exemple : dans un helper, ou une méthode de control etc.). De ce fait, si vous développez un helper, nécessitant une référence de librairie, vous n’aurez plus besoin de spécifier à chaque utilisation cette référence, votre méthode de Helper génèrera cette dépendance.
A l’image d’un Script Register, Scripts.Add contrôle si le script est déjà référencé, si non, la référence sera ajoutée, à l’endroit ou vous lui aurez spécifié dans la View, à l’aide de Scripts.GetScriptTags, par exemple à la fin du Layout.

Nouveaux attributs
[AllowAnonymous]
Permet de bypasser une obligation d’autorisation globale dans un controller. Par exemple, vous avez opter pour une authentification nécéssaire pour toutes méthodes de votre controller à l’aide de [Authorize], [AllowAnonymous] vous permettra de ne pas obliger l’authentification sur une méthode de control.
[AsyncTimeout],[NoAsyncTimeout]

Permet sur une méthode de control asynchrone, de déterminer un Timeout avant levée d’exception.
Configuration
On remarque 2 nouvelles clefs par défaut :
webpages:Version
Permet de choisir le moteur de Webpages utilisé. Il est possible de faire cohabiter les 2 moteurs, vos sites en Webpages 1.0 resteront en 1.0, idem pour les 2.0. Si vous voulez faire tourner un site WebPages 1.0 vers WebPages 2.0, utiliser cette clef : webpages:Version , value : 2.0.0.0.
PreserveLoginUrl
Sert à empêcher la surcharge du loginRedirect des FormsAuthentification, notamment pour les développements WebMatrix, référençant WebData.Dll.
Controllers Asynchrones
A l’aide du Framework .NET 4.5, ASP.NET 4.5, et ASync CTP (Librairie de gestion de méthodes asynchrones) , nous remarquons l’arrivée des méthodes de contrôles asynchrones.
Ces méthodes de contrôles asynchrones vont nous permettre de binder simultanément par exemples plusieurs parties de model, ou établir plusieurs traitements simultanément.
Nous retrouvons dans System.Web.Mvc 4.0 , un nouveau namespace System.Web.Mvc.Async :

Exemple,

Ici je déclare mon action méthode en tant que méthode asynchrone. Celle-ci doit obligatoirement retourner une Task, qui retourne elle-même un ActionResult, soit une Task<ActionResult> (Pour rappel, ActionResult est le type qui encapsule tous les types possibles de retours d’une action MVC). Ceci permettra au moteur IIS de pouvoir gérer le retour asynchrone de l’action.
Le model est bindé à l’aide de 2 méthodes, exécutées simultanément. Nous avons vu plus haut les attributs Timeout, qui permette de fixé le temps de latence limite avant laquelle une exception est levée. HandleError permet ici de catcher l’exception et d’adopter une redirection lors de la levée de celle-ci.
N.B : Il faut obligatoirement avoir ASync CTP / C#5 installé, afin de pouvoir utiliser ce type de méthode de contrôle.
Premier constat
Pas mal de nouveautés client-side principalement, on sent de plus en plus Microsoft s’investir sur les terminaux portables et tablettes, qui sont ( Cf Build & Windows 8 sur tablette), les principales orientations des prochains mois (année ?). On remarque également l’implantation plus profonde et précise du Framework Async dans ASP.NET 4.5, annoncée rapidement au Mix 2011 dans une conférence WebForms ( mais est-il mort finalement ? et bien non au contraire).
Un apparition de KnockoutJS, vraiment pas mal, mais un peu déroutant face à JQuery Template, qui était annoncé prochainement comme partie intégrante des librairies client-side ASP.NET.
Cette developper preview confirme la tendance vers un développement web asynchrone sur plateformes mobiles, on attend la suite
.