Professional Documents
Culture Documents
1. Dveloppement
ASP.NET ASP.NET MVC
2. Contrles
2.1 Contrles lmentaires
2.2 Prsentation de donnes
2.3 Programmation de contrles
Lionel Seinturier
3. MVC
Universit de Lille 1
Lionel.Seinturier@univ-lille1.fr
19/1/15
ASP.NET ASP.NET
Active Server Pages (ASP) ASP vs ASP.NET
du code Java embarqu dans une page HTML volution des ASP pour prendre en compte .NET
mmes principes JSP, PHP extension .asp (.aspx pour ASP.NET)
ASP : VBScript ou JScript ASP.NET : VB, C#, langages .NET
les fichiers .aspx sont stocks sur le serveur (comme des docs)
ASP: interprt/non typ ASP.NET : compil/typ
ils sont dsigns par une URL http://www.lifl.fr/prog.aspx
le chargement de l'URL provoque l'excution de l'ASP ct serveur
ASP.NET vs JSP
1 2 modle de programmation similaire
Client Serveur prog.aspx
++ ASP.NET = composants graphiques (contrles)
4 3
IE ASP.NET vs servlet
Firefox CLR .NET
... pas d'quivalent de l'API servlet dans le monde ASP.NET
en interne, les ASP.NET sont traduites en classes et compiles
invocation
! ce qui est <HTML> <BODY>
excution renvoy <H1>Table des factorielles</H1>
1! = 1<BR>
ct serveur au client 2! = 2<BR>
3! = 6<BR>
</BODY> </HTML>
1. Dveloppement 1. Dveloppement
Principe de fonctionnement Principe de fonctionnement
plusieurs zones <% ... %> possibles dans une mme ASP.NET
excutes dans leur ordre de dfinition
1re invocation
<%@ Page Language="c#" %>
<HTML> <BODY>
<H1>Compteur</H1>
<script runat="server">
int GetCompteur() {
return compteur++;
}
</BODY> </HTML>
1. Dveloppement 1. Dveloppement
Balise <script> Les objets implicites
Le code peut tre dfini dans un fichier externe Objets prdclars utilisables dans le code
<script runat="server" src="url" /> Session suivi de session pour un mme client
Session.Add( string name, object value )
<H1> <% Response.Write(GetCpt()); %> </H1> Session[string name]
</BODY> </HTML> Application espace de donnes partag entre toutes les ASP.NET
idem Session
1. Dveloppement 1. Dveloppement
Inclusion de pages ASP.NET 4 Dlgation de page
ASP.NET 1
aggrgation des rsultats fournis Une page peut dlger le traitement d'une requte une autre
par plusieurs page ASP.NET 5 ! prise en compte complte de la requte par la page dlgue
! meilleure modularit ASP.NET ASP.NET 2
! meilleure rutilisation Mthode Server.Transfer
Tout ce qui est aprs Transfer est ignor
ASP.NET 3
Mthode Server.Execute
URL URL
1. Dveloppement 1. Dveloppement
Exemple de gestion d'erreur Gestion des traces
Trace.Write(string message)
Trace.Write(string categorie, string message)
Trace.Write(string categorie, string message, Exception e)
Si hasard = 0 idem mthode Warn : les messages apparaissent en rouge dans les traces
page d'erreur err.aspx
1. Dveloppement 1. Dveloppement
Les objets prdfinis ASP.NET Les objets prdfinis ASP.NET
Response la rponse une requte Session gestion d'une session client
System.Web.HttpResponse System.Web.SessionState.HttpSessionState
Session cre lors de la 1re visite d'un client (Session.IsNewSession vaut true)
Session.Timeout dlai d'inactivit (en minutes) au del duquel la session expire
Plan 2. Contrles
Philosophie ASP.NET
1. Dveloppement Sparer
rendu graphique
2. Contrles traitement
2.1 Contrles lmentaires
2.2 Prsentation de donnes
2 fichiers
2.3 Programmation de contrles
.aspx
3. MVC le code de prsentation et celui des contrles
fichier XTHML (HTML 4.0 formul en XML)
Web form
.aspx.cs , .aspx.vb ,
fichier dit codebehind
classe contenant les traitements
Fichier WebForm1.aspx.cs
demo >>
Alternativement
peut tre instancie par programme LoadControl("Date.ascx")
ajoute dynamiquement une page
<script runat="server">
clic void Page_Load() {
Control dt = LoadControl("Date.ascx");
((Date_ascx)dt).Jour = 12;
Frm.Controls.Add(dt);
}
</script>
<form id="Frm" runat="server">
...
3. MVC 3. MVC
Model View Controller Contrleur
1978 Smalltalk Xerox PARC reoit les requtes des clients
nombreux langages et frameworks Web (Ruby on Rails, JSF, Spring, etc.) renvoie les rponses
principe de sparation des proccupations (separation of concerns) contient des mthodes correspondant des actions
modle, vue et contrleur dans des domaines spars qui sont mis en relation avec une vue
qui peuvent ou pas correspondre des classes, mthodes, packages, etc. qui intragissent avec le modle
pas de rgles rcupre des donnes dans le modle
conventions les renvoie l'utilisateur via une vue
3. MVC 3. MVC
Vue Vue
ASP.NET ou Razor Razor fournit un objet utilitaire prdfini @Html
Razor : syntaxe HTML avec du code C# (ou VB) pour dfinir des vues simplifie notamment la gnration de formulaire d'dition de donnes
fichier .cshtml
@Html.ActionLink("Modifier la fiche","Edit")
HTML avec @code ou @{ ... }
// gnre un lien HTML vers l'action Edit du contrleur associ la vue
// quivalent <a href="/.../Edit">Modifier la fiche</a>
<ul>
@{ var hello = "Hello world at ";
@Html.BeginForm()
var time = DateTime.Now;
@Html.TextBox("Ville","valeur par dfaut")
var msg = hello + time; }
@Html.Label
@for( int i=0 ; i < 10 ; i++ ) {
@Html.ListBox
<li>@i</li>
...
}
<b>Message</b>: @msg
</ul>
voir par exemple pour plus d'informations sur la syntaxe
http://www.mikesdotnetting.com/article/184/html-helpers-for-forms-in-razor-web-pages
simplifie l'criture des pages par rapport .aspx avec <% ... %>
demo >>
3. MVC 3. MVC
Modle Route
oprations courantes effectues par les vues sur DbContext (voir Entity Framework) la 4me composante de MVC
permet d'aiguiller les requtes HTTP vers un contrleur particulier
CompteDbContext db = new CompteDbContext(); /App_Start/RouteConfig.cs
db.Comptes.ToList(); // liste des comptes mthode static RegisterRoute
Compte compte = db.Comptes.Find(42); // recherche d'un compte
public class RouteConfig {
Compte compte = new { Id=42, Titulaire="Bob", Solde=123 }; public static void RegisterRoute {
db.Comptes.Add(compte);
routes.MapRoute( "Product", // nom de la route
db.SaveChanges(); // ajout d'un compte
"product/{action}/{id}", // pattern URL
Compte compte = db.Comptes.Find(42); new { controller="Product", action="Index", id="" } );
compte.Solde += 100;
db.SaveChanges(); // modification d'un compte routes.MapRoute( "Default",
"{controller}/{action}/{id}",
Compte compte = db.Comptes.Find(42); new { controller="Home", action="Index", id="" } );
db.Comptes.Remove(compte); } }
db.SaveChanges(); // suppression d'un compte
[RoutePrefix("reviews")]
tutoriel
http://www.asp.net/mvc/overview/getting-started/
public class ReviewsController : Controller {
introduction/getting-started
[Route] // accs via http://...:../reviews
http://www.intertech.com/Resource/UserGroup/MVCAndEF.pdf
public ActionResult Index() {...}
[Route("{reviewId}")] // /reviews/42
public ActionResult Show( int reviewId ) {...}
[Route("{reviewId}/edit")] // /reviews/99/edit
public ActionResult Edit( int review ) {...}
}