Web dev open door

Preview:

DESCRIPTION

nouveautés ASP.Net 4.5, MVC, WCF Web API, Entity Framework Code First, Nuget

Citation preview

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

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 !