web dev open door
DESCRIPTION
nouveautés ASP.Net 4.5, MVC, WCF Web API, Entity Framework Code First, NugetTRANSCRIPT
PIERRE COUZY – MICROSOFT FRANCE
MVC & nouveautés ASP.NET
Où en sommes-nous ?
Framework .NET (4.5)
ASP.NET
PrésentationWebForms
4.5 ?MVC 4 Ajax Dynamic
DataWeb Pages
2
Une intro rapide à ASP.Net MVC
En WebFoms, la page est le point de départ de votre applicatonEn MVC, le code est le point de départ de votre application
Quel code ? On reprend les principes REST : L’URL représente ce qu’on veut fairePar exemple /Clients/Affiche/Dupont
.. Démo ?
Du neuf à tous les étages
Dans ASP.NET Core
Dans ASP.NET WebForms
Dans ASP.NET MVC
…
ASP.NET CORE
<script src=“Scripts/js"></script>
Minification et bundles
Packaging des scripts
Packaging des css
Ordre : alphabétique + bon sens
(js connus placés en tête, ainsi que reset.css et normalize.css)
<link href="styles/css" rel="stylesheet" />
Validation des requêtes
La validation des requêtes change dans ASP.Net 4.5
Les champs ne sont validés qu’à la première utilisation
Et on peut choisir de ne pas les valider.
<httpRuntime requestValidationMode="4.5" ... />
var s = context.Request.Unvalidated.Form["forum_post"];
jQuery, on continue !
Source : trends.builtwith.com
ASP.NET WebForms
Eval et Bind
<ul><asp:Repeater runat="server" ID="clients"><ItemTemplate><li>Nom: <%# Eval("Nom") %><br />Prenom: <%# Eval("Prenom") %><br /></li></ItemTemplate></asp:Repeater></ul>
<asp:FormView runat="server" ID="editClient"><EditItemTemplate><div><asp:Label runat="server" AssociatedControlID="prenom">Prenom :</asp:Label><asp:TextBox ID="prenom" runat="server" Text='<%# Bind("Prenom") %>' /></div><div><asp:Label runat="server" AssociatedControlID="nom">Nom :</asp:Label><asp:TextBox ID="nom" runat="server" Text='<%# Bind("Nom") %>' /></div><asp:Button runat="server" CommandName="Update" /></EditItemTemplate></asp:FormView>
Item et BindItem
<asp:FormView runat="server" ID="editClient" ModelType="ASPNETvNextTest.Model.Client"><EditItemTemplate><div><asp:Label runat="server" AssociatedControlID="prenom">Prenom :</asp:Label><asp:TextBox ID="prenom" runat="server" Text='<%# BindItem.Prenom %>' /></div><div><asp:Label runat="server" AssociatedControlID="nom">Nom :</asp:Label><asp:TextBox ID="nom" runat="server" Text='<%# BindItem.Nom %>' /></div><asp:Button runat="server" CommandName="Update" /></EditItemTemplate></asp:FormView>
Typage des contrôles de binding<asp:GridView ID="categoriesGrid" runat="server"ModelType="WebApplication1.Model.Category" AutoGenerateColumns="false"><Columns><asp:BoundField DataField="CategoryID" HeaderText="ID" /><asp:BoundField DataField="CategoryName" HeaderText="Name" /><asp:BoundField DataField="Description" HeaderText="Description" /><asp:TemplateField HeaderText="# of Products"><ItemTemplate> <%# Item.Products.Count %> </ItemTemplate></asp:TemplateField></Columns></asp:GridView>
Datasource : selectMethod
<asp:GridView ID="categoriesGrid" runat="server"ModelType="WebApplication1.Model.Category"SelectMethod="GetCategories" AutoGenerateColumns="false"><Columns><asp:BoundField DataField="CategoryID" HeaderText="ID" /><asp:BoundField DataField="CategoryName" HeaderText="Name" /><asp:BoundField DataField="Description" HeaderText="Description" /><asp:TemplateField HeaderText="# of Products"><ItemTemplate> <%# Item.Products.Count %> </ItemTemplate></asp:TemplateField></Columns></asp:GridView>
public IQueryable<Category> GetCategories(){var db = new Northwind();return db.Categories.Include(c => c.Products);}
Passage de paramètres
public IQueryable<Product> GetProducts([QueryString]string keyword){IQueryable<Product> query = _db.Products;
if (!String.IsNullOrWhiteSpace(keyword)){query = query.Where(p => p.ProductName.Contains(keyword));}
return query;}
En vrac…
Encodage
Unobtrusive Javascript
AntiXSS
<asp:TemplateField HeaderText="Name"><ItemTemplate><% #:Item.Products.Name %></ItemTemplate></asp:TemplateField>
<add name="ValidationSettings:UnobtrusiveValidationMode" value="WebForms" />
<httpRuntime encoderType="System.Web.Security.AntiXss.AntiXssEncoder, System.Web, Version=4….
Extensions
WCF Web API
[ServiceContract] public class ContactsApi { [WebGet(UriTemplate = "")] public IQueryable<Contact> Get() { var contacts = new List<Contact>() { new Contact {ContactId = 1, Name = "Phil Haack"}, new Contact {ContactId = 2, Name = "HongMei Ge"}, new Contact {ContactId = 3, Name = "Glenn Block"}, new Contact {ContactId = 4, Name = "Howard Dierking"}, new Contact {ContactId = 5, Name = "Jeff Handley"}, new Contact {ContactId = 6, Name = "Yavor Georgiev"} }; return contacts.AsQueryable(); } }
public static void RegisterRoutes(RouteCollection routes) {
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");routes.Add(new ServiceRoute("api/contacts", new HttpServiceHostFactory(),
typeof(ContactsApi)));
WCF Web API
IQueryable permet de passer des requêtes LINQ
L’API renvoie au choixXML ou JSON (entête http Accept:)
Un client de test est disponible
var config = new HttpConfiguration() { EnableTestClient = true }; routes.Add(new ServiceRoute("api/contacts", new HttpServiceHostFactory() { Configuration = config}, typeof(ContactsApi)));
NuGet
Entity Framework « Code First »
Allons un peu plus loin ?
Scaffolders MVC
ASP.NET MVC 4
Arrivée des rendus mobiles
Trois grandes façons de procéder
CSS media queries
Vues spécialisées
Projets dédiés
« adaptive rendering »
E.g., on s’appuie sur les CSS Media Queries
PourOptimisé pour le type de navigateurPas de duplication
ContreOn ne peut pas vraiment spécialiser la version mobile vs. DesktopUtilisation excessive de la bande passante
Rendu côté serveur
E.g. les vues sont différentes en fonction du client
PourFlexibilité maximaleEfficacité en bande passante
ContreOn peut avoir de la répétitionLa détection fine des devices n’est pas triviale
En conclusionMicrosoft a réussi à décorréler les évolutions d’ASP.Net et de VS
Proprement et par projet, grâce à NuGet
MVC prend du galonNettement plus productif tous les ansDoté d’un arsenal pour le dev mobileEpaulé par NuGet / EF / Scaffolders / etc
Il y a sur Internet 30 fois plus de WebForms que de MVCLes proportions sont meilleures en entreprise
L’investissement de Microsoft dans WebForms est importantAdaptation de toutes les nouveautés intéressantes
Alors, MVC ou WebForms ?Il est temps de prendre des compétences MVC, même si le cœur de votre activité reste WebForms
MERCI !