Introduction to .NET and ASP.NET Framework Mauro Minella [email protected] http://blogs.msdn.com/mauromi Microsoft Certified Solutions Developer Microsoft Certified Systems Engineer + Internet Politecnico di Torino December 4th , 2007 Agenda .NET Framework: architecture WEB extension: ASP.NET 2.0 Development Tools: Visual Studio 2008 Membership: roles and controls Localization, Master Pages, Skins and Themes AJAX Demo’s/Examples From HTML to ASP.NET ASP.NET HTML ASP pages CGI apps ISAPI filters .NET and ASP.NET architecture Win32 SDK .NET Framework ASP.NET Unmanaged Windows Managed Applications WEB Managed Applications (Win Forms, Console, Services, ...) (WEB Forms / WEB Services) Applications Base Class Library Base Class Library Common Language Common Runtime Language Runtime WEB Server (IIS) Sistema Operativo (Windows) CLR Class Library WEB Forms WEB Services interoperability, security, garbage collection, versioning, ... GUI, collections, threads, networking, reflection, XML, ... Web GUI (object-oriented, event-based, browser-independent) Distributed services over RPC (SOAP, HTTP) .NET FRAMEWORK PROGRAMMING Binary compatibility for all languages Isolated code (only to allowed memery access) Codice type-safe (no buffer overrun) Just-in-time compiler C# C++ VB J# ... C# if (a > b) max = a; else max = b; IL compiler compiler compiler compiler IL code (+ metadata) compiler IL_0004: IL_0005: IL_0006: IL_0008: IL_0009: IL_000a: IL_000c: IL_000d: ldloc.0 ldloc.1 ble.s IL_000c ldloc.0 stloc.2 br.s IL_000e ldloc.1 stloc.2 loader verifier JIT compiler machine code Intel code mov ebx,[-4] mov edx,[-8] cmp ebx,edx jle 17 mov ebx,[-4] mov [-12],ebx ... Indipendence from platform and code langauge .NET is a CLI implementation Common Language Infrastructure CLI is an ECMA standard, defined with the C# ECMA-334, ECMA-335 Existing CLI implementations: SSCLI (Microsoft per Windows, FreeBSD and Macintosh) Mono (for Linux) DotGNU Intel OCL (Open CLI Library) … ViewState • Keeps the state at Page level ▫ It’s a name/value dictionary • It’s a Hidden field of the page • Can also be used programmatically ▫ ViewState.Add(“NomeUtente”, “Mauro”) • Can be disabled at page level ▫ <%@ Page ... EnableViewState="false"%> ▫ Be aware: some controls might not work any more! PostBack Tipical usage: code optimiza- tion for accessing hi cost (like DB) resources just once protected void Page_Load(..) { if(Page.IsPostBack == false) { // It’s the first access // Let’s open the DB connection! } } IsPostBack property is true since second time on Page_Load happens when Button Submit Server-side controls with enabled AutoPostBack Can be used to initialize controls DEMO Let’s build our first ASP.NET application! Development Tool: Microsoft Notepad A .aspx page tipically has 3 sections: Page directives: environment setup, controls registration, assemblies load if not in GAC, namespace registration, code language declaration Code section: server side business logic; can be in-lin or separated Page layout: page scheleton, including server side controls, text, HTM tags Let’s build our first application (cont.) Create an empty.ASPX file Prepare scheleton Add controls Make controls server-side ASP.NET runtime parses the page and creates instances of .NET framework classes for every control where runat = “server” Add: Click even handler: OnServerClick="MakeItUpper" Chosen Language: <% @Page Language="C#"%> C#, VB o C++ code (which is not sent to the client!) Introduction a Visual Studio / VWD • Free download from Microsoft website http://www.microsoft.com/italy/msdn/prodotti/vs2005/editions/download/wdd.mspx • Let’s explore the IDE • Let’s create a Web Site • Controls and base features ▫ Server-side controls whose output depends on client • Diagnostics page life cycle Controls Controlli HTML: Standard HTML <a >..., <label>... Server-side controls Generated HTML depends on browser They are tens!! Let’s look at some of them… Validators Server-side controls to validate input They check if the browser supports client-side validation and in this case send JScript to it RequiredFieldValidator ValidatorSummary RangeValidator RegularExpressionValidator CompareValidator CustomValidator (can also be used to send a JS function back) Demo Validators Debugging (Server-side) Enabled within the web.config file Debugging (Javascript) A few more steps: Use browser settings: Tools – Internet Options - Advanced You can run debugger from IE and then set a breakpoint on javascript code Or from Visual Studio “attach to process” to IE process Not supported on “Express” versions “Trick”: “debugger;” instruciton in the JS code Remember not to leave in production! server-side vs. client-side: OnServerClick OnClick (you can have both!) <script runat="server"> <script language="javascript" type="text/javascript"> Linguaggio vb.net/c#/c++/j#/f#/cobol.net/… javascript syntax Il postback happens only if the function returns TRUE Pagina Life Cycle (hi level view) PreInit: use it to: Check IsPostBack property Create dynamic controls Apply themes and master pages dynamically Read/write user profiles Init: read and initialize control properties Load: read and update control properties PreRender: change page contents UnLoad: fianal closing tasks Tracing Can be enabled in the web.config or on page level pageOutput enables output to page or by using trace <trace enabled="true" pageOutput="false" /> <%@ Page Language="C#" ... Trace="true"%> In you need to write a trace information: Trace.Write (categoria, messaggio, eccezione); Trace.Warn (categoria, messaggio, eccezione); Trace.Write (messaggio); ... Trace example Membership, roles and log-in controls Authentication and Permissions Authentication: scenarios Identify who is accessing our web site Two tipical scenarios: Intranet: can leverage integrated server control access e.g. IIS uses Integrated Authentication Tipically, users are hosted within the Active Directory Users do not need to provide credentials explicitly Internet: can leverage a database to store users and permissions Users must provide username and password Authentication: an extensibile model Controls Un modello estendibile Login LoginStatus LoginView Other Login Controls Membership API Membership MembershipUser Membership Providers AspNetSqlMembershipProvider Membership Data SQL Server Other Membership Providers Other Data Stores Log-in controls Interact with a provider for membership management Login: allows to do a login providing username + pwd LoginView: allows different content for authenticated and not-authenticated users PasswordRecovery: leverage the secret question to regenerate password LoginStatus: to check is the user is logged or not LoginName: provides the current logged user ChangePassword: to change password CreateUserWizard: to save time in writing lot of code! Using Web Site Administration tool (WSA) Parameters are stored in the web.config file Authentication type SMTP server, tracing, debugging, errors, ... Users handler Create, Delete, Update ... Roles and access rules management Folder by folder Provider configuration to access database Can be used through a 7-steps Wizard WSA: Security section Membership API by code MembershipCreateStatus ms; MembershipUser user=Membership.CreateUser( “mauro", “Password1!", “[email protected]", “Colore preferito?", “Blu", true,out ms); if (user==null) Label1.Text = "Non è possibile creare un utente"; else Label1.Text = "Utente creato"; if (Membership.ValidateUser(username.Text, password.Text)) FormsAuthentication.RedirectFromLoginPage(username.Text, false); else Label1.Text = "Username e password non corretti"; Demo Web Site Creation: Leverage integrated controls Login, LoginName and LoginStatus controls Leverage WSA to create users and groups Leverage IIS Manager to configure WEB server Localizzazione, Temi, Skin e Pagine Master Come creare una grafica del sito omogenea e consistente Localizzazione Usa file di risorse selezionati a run-time da ASP.NET Due cartelle: App_LocalResources: i file contengono risorse per una singola pagina App_GlobalResources: i file possono essere letti da qualsiasi pagina del sito Web Indicazione della localizzazione nelle direttive di pagina - UICulture="auto" Naming convention per la pagina: - linguaggio neutrale: pagina.aspx.resx - linguaggio specifico (es. italiano): pagina.aspx.it.resx Naming convention per le risorse: - meta:resourcekey="ResourceXYZ" nelle proprietà controllo (tag HTML) - Name=ResourceXYZ.<Proprietà> e Value=Valore nei file <page>.resx e <page>.<language>.resx Impostare nel browser del client lingua e priorità Tipi di risorse: stringhe, immagini, audio, file, icone, altro DEMO Temi (CSS e Skin) Definiscono la grafica della pagina Sono un superset dei CSS (Cascading Style Sheets) Sono disponibili solo in ASP.NET 2.0 Assegnano un insieme di stili e attributi visuali agli elementi personalizzabili del sito Sono strettamente legati ai temi di XP: impostare un tema è rapido e facile come impostare una proprietà Si applicano controlli individuali, pagine o siti Creazione di CSS Si usa un tool integrato nell’ ambiente, che si attiva dal menu “Stili” dopo avere aggiunto un file CSS File di Skin - esempio ▫ Creo una cartella per ogni stile sotto App_Themes ▫ Creo un file per ogni skin nella cartella creata sopra ▫ In fondo ad ogni file .skin: <asp:label runat="server" backColor= "Green" SkinID="lblTitolo"/> ▫ Definisco uno SkinID altrimenti lo skin viene applicato a tutti i controlli di quel tipo, e lo seleziono nelle proprietà ▫ Imposto lo skin nella direttiva di pagina StylesheetTheme ▫ Seleziono lo SkinID per il controllo ▫ DEMO Pagine Master Content Page Pagine master Le pagine master definiscono la struttura e i placeholder (<asp:ContentPlaceHolder>) Le pagine “figlie” referenziano la master e creano il contenuto (<asp:Content>) Le pagine master sono trasparenti all’utente, il quale invoca solo le pagine content Site.master <%@ Master %> <asp:ContentPlaceHolder ID="Main" RunAt="server" /> default.aspx <%@ Page MasterPageFile=“MasterPage.master" %> <asp:Content ContentPlaceHolderID= "Main" RunAt="server" /> </asp:Content> http://.../default.aspx La proprietà Page.Master Ottiene un riferimento alla pagina master dalla pagina figlia Usata per avere accesso programmatico al contenuto della pagina master Usare FindControl per weak typing Usere public property nella master page per strong typing ASP.NET AJAX Concetti e fondamenti AJAX • Che cos’è e come funziona • Da dove partire • AJAX ASP.NET Extensions 1.0 • XMLHttpRequest : la base • AJAX Control Toolkit • AJAX Futures CTP Cos’è AJAX? • AJAX = Asynchronous JavaScript and XML ▫ Una nuova tecnica per lo sviluppo di applicazioni web • Risolve molti dei problemi che affliggono le moderne applicazioni web ▫ Elimina il “flickering” delle pagine • Usa XmlHttpRequest per recuperare dati dal server in modo asincrono e il JavaScript per aggiornare il contenuto della pagina • Nasce con OWA (Outlook Web Access) • Tecnologia abilitante per il Web 2.0 AJAX: Come funziona? 1 Il browser invia una richiesta HTTP al server 2 Il server restituisce il contenuto. Il browser ne fa il rendereing 3 IL browser invia una richiesta asincrona XML-HTTP al server. La UI non si blocca e non ha effetti di flickering Browser 4 La richiesta XML-HTTP si conclude. Il JavaScript aggiorna la porzione della pagina interessata Web Server XmlHttpRequest • Introdotto nel 1999 con Internet Explorer 5 ▫ Oggetto ActiveX per le chiamate di callback dal Web server ▫ In IE 7 fa parte del modello ad oggetti del browser • Successivamente adottato da Firefox, Safari e altri ▫ In via di standardizzazione dal W3C http://www.w3.org/TR/XMLHttpRequest/ • Supportatato oggi da circa il 99% dei browser ▫ Circa 85%-95% hanno abilitato il JavaScript Instanziare XmlHttpRequest var xhr = null; try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { if (typeof XMLHttpRequest != "undefined") { xhr = new XMLHttpRequest(); } } Verifica supporto AJAX per il client xhr.open ('GET', 'AjaxDemo.aspx?mode=ajax', true); xhr.onreadystatechange = checkForCompletion; xhr.send (); ... function checkForCompletion() { if (xhr.readyState == 4 && xhr.status == 200) { window.alert(xhr.responseText); } } Che cos’è Microsoft ASP.NET AJAX ? Un FRAMEWORK per realizzare applicazioni WEB, interattive e dalla ricca interfaccia utente Facilita lo sviluppo di applicazioni AJAX Estende e completa ASP.NET 2.0 Anche se può essere usato con PHP Multi-browser Estendibile Microsoft AJAX: i componenti base ASP.NET 2.0 AJAX Futures CTPs ASP.NET AJAX Toolkit Server Side Client Side ASP.NET 2.0 AJAX Extensions Microsoft AJAX Library • Supporto Microsoft standard per le ASP.NET 2.0 AJAX Extension • Supporto della comunity per le Futures CTPs ed il Toolkit. AJAX: da dove partire Componenti essenziali di AJAX ASP.NET Contengono: -Template AJAX per VS/WD 2005 -Controlli lato server community -Progetto share-source --Ajax Estendono la(JavaScript piattaformalato core client) -EsempiLibrary già pronti - Richiedono le ASP.NET 2.0 AJAX Extensions 1.0 -SDK per la creazione di nuovi controlli - Aggiungono funzionalità come -Richiede ASP.NET Extensions - Drag-and-Drop - XML Script - etc -Possono essere utilizzate anche con server non MS -Fanno parte di ASP.NET Extensions Microsoft AJAX Library • La parte client di ASP.NET 2.0 AJAX ▫ Tipicamente installata in “%ProgramFiles%\Microsoft ASP.NET\ASP.NET 2.0 AJAX Extensions\v1.0.61025\MicrosoftAjaxLibrary” • Indipendente dal browser e dalla piattaforma ▫ Internet Explorer, Firefox, Mozilla, Safari, etc. ▫ Si astrae dalla piattaforma sottostante • Un JavaScript “arricchito” ▫ Namespaces, classi, interface, ereditarietà, etc. ▫ Un sistema dei tipi • File *.js scaricati una sola volta sul client ASP.NET AJAX 2.0 Extensions UpdatePanel • È il controllo ASP.NET AJAX più importante • Consente di trasformare facilmente una applicazione ASP.NET 2.0 in un’applicazione AJAX • Permette di fare il rendering di parte della pagina ▫ Converte postbacks in chiamate asincrone ▫ Aggiorna parte della pagina web con il risultato ▫ Non si scrive JavaScript Passo 1 Aggiungere lo ScriptManager Aggiungere ad una pogina aspx: <asp:ScriptManager ID="MyScriptManager" Runat="server" /> Lo ScriptManager genera: <script src="/.../WebResource.axd?d=iQ15p6LHcT2T5QE..." type="text/javascript"></script> Riferimento allo script .js da scaricare Passo 2 Usare un UpdatePanel <asp:ScriptManager ID="..." Runat="server" EnablePartialRendering="true" /> . . . <asp:UpdatePanel ID="..." Runat="server"> <Triggers> <!– Se necessario definire dei trigger--> </Triggers> <ContentTemplate> <!– Il contenuto va qui --> </ContentTemplate> </asp:UpdatePanel> Update Panel Estendiamo la piattaforma ASP.NET ASP.NET AJAX Control Toolkit • Aggiunge nuovi controlli server ad ASP.NET AJAX • Template per la realizzazione di nuovi Extender • Sviluppato in collaborazione con la community, in Shared Source Da dove partire - 1 Da dove partire - 2 Da dove partire - 3 AJAX Control Toolkit Estendiamo la piattaforma ASP.NET ASP.NET AJAX Futures CTPs • Estende la piattaforma core • Richiede le ASP.NET 2.0 AJAX Extensions 1.0 • Aggiunge funzionalità ▫ Drag-and-Drop ▫ XML Script ▫ etc Quindi ... • AJAX = Asynchronous JavaScript and XML ▫ Applicazioni web più ricche ed interattive • ASP.NET AJAX = Framework per lo sviluppo con AJAX ▫ Microsoft AJAX Library (client-side framework) ▫ ASP.NET 2.0 AJAX Extensions (server-side framework) • ASP.NET AJAX è… ▫ Ottimizzato per l’uso su internet ▫ Supporta numerosi browser ▫ Compatibile con PHP, ColdFusion ed altre piattaforme • Per lo sviluppo di applicazioni web nei prossimi anni • Estende ed arrichisce la piattaforma Web ▫ da ASP.NET 2.0 a ASP.NET 2.0 AJAX Extensions Link utili • About Native XMLHTTP ▫ http://msdn.microsoft.com/library/default.asp?url=/workshop/author/d html/overview/aboutxmlhttp.asp • Sito ufficiale ASP.NET AJAX ▫ http://ajax.asp.net • Blogs: ▫ http://weblogs.asp.net/scottgu ▫ http://www.nikhilk.net Q&A [email protected]