web dev open door

29
PIERRE COUZY – MICROSOFT FRANCE MVC & nouveautés ASP.NET

Upload: letesteur

Post on 27-May-2015

580 views

Category:

Documents


3 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Web dev   open door

PIERRE COUZY – MICROSOFT FRANCE

MVC & nouveautés ASP.NET

Page 2: Web dev   open door

Où en sommes-nous ?

Framework .NET (4.5)

ASP.NET

PrésentationWebForms

4.5 ?MVC 4 Ajax Dynamic

DataWeb Pages

2

Page 3: Web dev   open door

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 ?

Page 4: Web dev   open door

Du neuf à tous les étages

Dans ASP.NET Core

Dans ASP.NET WebForms

Dans ASP.NET MVC

Page 5: Web dev   open door

ASP.NET CORE

Page 6: Web dev   open door

<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" />

Page 7: Web dev   open door

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"];

Page 8: Web dev   open door

jQuery, on continue !

Source : trends.builtwith.com

Page 9: Web dev   open door

ASP.NET WebForms

Page 10: Web dev   open door

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>

Page 11: Web dev   open door

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>

Page 12: Web dev   open door

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>

Page 13: Web dev   open door

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);}

Page 14: Web dev   open door

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;}

Page 15: Web dev   open door

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….

Page 16: Web dev   open door

Extensions

Page 17: Web dev   open door

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)));

Page 18: Web dev   open door

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)));

Page 19: Web dev   open door

NuGet

Page 23: Web dev   open door

ASP.NET MVC 4

Page 24: Web dev   open door

Arrivée des rendus mobiles

Trois grandes façons de procéder

CSS media queries

Vues spécialisées

Projets dédiés

Page 25: Web dev   open door

« 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

Page 26: Web dev   open door

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

Page 28: Web dev   open door

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

Page 29: Web dev   open door

MERCI !