ASP vs. ASP.NET Andrea Saltarello Software Architect - Managed Designs S.r.l. [email protected] http://blogs.ugidotnet.org/pape Sponsor UPGRADE • ASP Vs. ASP .NET • Debug.Assert ((VB.NET <> VB6) And (VB.NET<>VBScript)) • <% …%> • COM o non COM, questo è il dilemma… • Demo Ugrade ASP .NET: vantaggi • Il codice eseguito: – E’ compilato: performance e scalabilità tipicamente superiori – Può utilizzare tutte le classi del Framework .NET • È un ambiente più produttivo (validators, databinding, security, …) – Può usare sessioni cookieless e scalabili in una web farm – E’ tipizzato – E’ tipizzato – E’ tipizzato ASP 2 ASP .NET - Focus • L'installazione di ASP .NET non impedisce il funzionamento delle applicazioni ASP esistenti • Le applicazioni ASP e ASP .NET: – possono essere eseguite side-by-side (usano estensioni di file differenti) – non condividono Session e Application • Anche se è possibile farlo scrivendo tanto codice – Sono comunque possibili strategie di migrazione parziale ASP e ASP .NET: analogie • Gli oggetti Request e Response sono ancora supportati • Gli include sono sopportati per compatibilità all’indietro… – …Ma gli User Control sono gratis, quindi usiamoli • Supportano codice applicativo frammisto ad HTML • La direttiva Language è ancora supportata (in realtà viene sottointeso Page) • VB .NET sa “imitare” (fin troppo) bene VBScript ASP .NET: differenze da ASP • Le pagine ASP .NET supportano un solo linguaggio • Le pagine ASP .NET supportano più di una direttiva • è necessario dichiarare le funzioni nelle pagine ASP.NET in blocchi <script runat=server> <% Sub DoSomething() Response.Write “Ciao a tutti !!!" End Sub DoSomething %> <script language="VB" runat=server> Sub DoSomething() Response.Write (“Ciao a tutti !!!") End Sub </script> <% DoSomething() %> ASP .NET: differenze da ASP • ASP.NET non supporta le funzioni di rendering di pagina <% Sub RenderSomething() %> <font color="red"> Sono le ore: <%=Now %> </font> <% End Sub %> <% RenderSomething RenderSomething %> <script language="VB" runat=server> Sub RenderSomething() Response.Write("<font color=“”red””> ") Response.Write(“Sono le ore: " & Now) Response.Write(“</font>") End Sub </script> <% RenderSomething() RenderSomething() %> ASP .NET: differenze da ASP • Option Explicit è impostato per default • è necessario dichiarare le variabili aventi scope page-level in blocchi <script runat=server> • le "pagine" ASP .NET si chiamano Web Form • Molti dei settaggi di IIS per le applicazioni ASP.NET vengono ignorati – La configurazione sta in ASP.NET • Web.config • Machine.config ASP .NET: da VBScript a VB .NET • Eliminazione di Set e Let • Eliminazione delle proprietà predefinite non indicizzate • Le parentesi sono necessarie per chiamare procedure/funzioni (in VB2002 anche se non hanno parametri) • per default, gli argomenti sono passati ByVal • Possiamo avvalerci della tipizzazione • Mai + complessi di inferiorità: VB.NET e C# sono simili – CLI – CLS Web Forms 101 • Le “pagine” ASP .NET si chiamano Web Forms, perché contengono: • <form runat=“server”> • … • </form> • Può esistere un solo web form per pagina • Non è possibile specificare una ACTION custom • Un web form può contenere: – HTML – Codice server-side – Server Controls Server Controls 101 • • • • • Oggetti programmabili Attributo runat=“server” Mantengono lo stato delle info Generano HTML per il client Espongono – Proprietà – Metodi • Scatenano eventi Stateful controls 101 • I controlli server mantengono le proprietà impostate fra round-trip • Tramite un campo hidden – __VIEWSTATE • Pro – Meno plumbing – Meno roundtrip verso i dati • Contro – __VIEWSTATE occupa banda – E’ disabilitabile Server Controls 101 (Reloaded) • <asp:TextBox runat=“server” id=“txtName” Text=“default”></asp:TextBox> • Modello ad oggetti consistente e strongly-typed – txtName.Text = “Andrea” – txtName.BackColor = Color.Red • Rendering differente per browser – Esempio: Label • Funzionalità differenti per browser – Esempio: Validation Control Migriamo? • Un esempio vale più di mille parole… Back to the future: ASP.NET 2.0 Master Pages Permettono di definire centralmente il layout di differenti web form Contenute in file .master Definite mediante la direttiva Master Usano due nuovi server control: • asp:ContentPlaceHolder • asp:Content Master Pages 101 <%@ Master %> Header Navigation <asp:ContentPlaceHolder Id=“MainContent” /> Footer <%@ Page MasterPageFile=“~/mySiteMaster.master” %> <asp:Content ContentPlaceHolderId=“MainContent” /> Nested Master Page • Le Master Page: • Possono essere annidate: anche la direttiva Master dispone di un attributo MasterPageFile (la versione beta1 di VWD non ne supporta il design) • Sono sensibili all’adaptive rendering <%@ page language="C#" MasterPageFile="~/Mysite.master" IE:MasterPageFile=“~/IE.master” Palm:MasterPageFile=“~/palm.master” Mozilla:MasterPageFile=“~/Mozilla.master” %> Nested Master Pages Una pagina contenuta da un master: • Può accedere al contenuto del proprio master mediante la proprietà Master della classe Page • Può sostituire il proprio master Master Page: Configurazione • Per pagina: <%@ page language="C#" MasterPageFile="~/Mysite.master" %> • Per sito/sezione: <configuration> <system.web> <pages masterPageFile="MySite.Master" /> </system.web> </configuration> Themes Themes 101 Permettono di applicare uno stile comune (skin) ai server control di una applicazione o di una sua parte • Skin = Attributi dei controlli – Sono contenute in file .skin • Theme = Insieme di una o più skin – Contenute nel folder Themes – Possono essere globali e locali Themes Unleashed I file .skin contengono i default settings da applicare ai server controls: <asp:Button runat="server" BorderStyle="Solid" BorderColor="#000066" BorderWidth="10pt" ForeColor="#000066" BackColor="#EEEEEE" /> Themes != CSS (Themes do it better ): • possiamo impostare anche proprietà non visuali: <asp:GridView runat="server" BackColor="#CCCCCC" BorderWidth="1pt" BorderColor="#CCCCCC" GridLines="None" AllowPaging="True" /> • Supportano adaptive rendering • Possono essere (dis)abilitati programmaticamente Proprietà EnableTheming di Page/Control Themes: deploy Tutti i file di un singolo Tema sono contenuti in un folder Il deploy di un Tema può essere: • Globale. Si trovano in: %SystemRoot%\Microsoft.NET\Framework\vX.X.XXXX\ASP.NETClientFiles \Themes • Locale. Si trovano in un subfolder della root chiamato Themes Global Themes ASP.NETClientFiles Theme name = Subdirectory name Themes SKIN BasicBlue SmokeAndGlass SKIN SKIN SKIN Local Themes vroot Theme name = Subdirectory name Themes ShockingPink AutumnLeaves SKIN SKIN SKIN SKIN Applicare un Tema • Per pagina: <%@ page Theme=“MyTheme" %> • Per sito/sezione: <configuration> <system.web> <pages theme=“MyTheme" /> </system.web> </configuration> Navigation Site Navigation 101 ASP .NET 2.0 offre alcuni server control built-in per la realizzazione della mappa di navigazione del sito, ad es: – <asp:SiteMapPath /> – <asp:Menu /> I controlli non contengono direttamente la definizione della mappa, ma la recuperano da appositi provider Navigation: Map Provider I provider sono classi derivate di SiteMapProvider XmlSiteMapProvider è il provider che permette di definire la mappa di navigazione in un file xml (web.sitemap) web.sitemap E’ un file XML, situato nella root del sito L’elemento root è <siteMap />, senza attributi Contiene vari elementi <siteMapNode />, dotati degli attributi: Title: il testo associato alla voce del menu Description: la descrizione della voce del menu Url: lo URL della risorsa associata AOI: ASP.NET Oriented Interop ASP .NET vs. COM • Il CLR consente agli oggetti .NET di interagire senza (particolari) difficoltà con i componenti COM tradizionali. • Un componente può essere istanziato: – in late binding mediante Server.CreateObject(ProgId) – in early binding creando un assembly di interoperabilità usando tblimp.exe o VS .NET – Mediante il tag <object> • L’uso di componenti non free-threaded richiede l’inserimento dell’attributo aspcompat=“true” nella direttiva Page – Es: Tutti quelli fatti in VB “Prehistoric Edition” COMe complicare le cose • Le applicazioni ASP “serie” non accedono al db, perché: – Ci hanno insegnato a implementarle con architettura multi-tier – Ci hanno detto di incapsulare l’accesso ai dati e le regole di business in componenti COM • …e ora? • Possiamo migrare in 2 fasi: – Pagine ASP Web Form ASP .NET – Server COM Assembly .NET Links http://www.ugidotnet.org http://forum.ugidotnet.org http://mobile.ugidotnet.org