Csirmaz Péter MCP, MCTS, MCPD Turóczy Attila diái alapján: Harmadik nap
Állapotkezelés Felhasználó kezelés Kliensoldali és szerveroldali validáció Globalization
Az őskorban az oldalak teljesen függetlenek voltak egymástól A mai igényeknek ez már legtöbbször nem megfelelő Az ASP.NET 3.5-ben az állapotkezelést két részre bonthatjuk: – Kliens oldali adattárolás – Server oldali adattárolás
Kliens oldali adattárolás: – Az információk tárolása az oldal ismételt lekérései során – Az adatokat a kliens gépen tároljuk Server oldali adattárolás: – Munka menethez kapcsolódó – Alkalmazáshoz kapcsolódó
A legtöbb Webes alkalmazásnak el kell tárolnia és vissza kell adnia a felhasználó állapot adatait Ez összefüggőséget és nagyon magas szintű funkcionalitást nyújt Mindezt nagyon egyszerűen a lehető legkevesebb kódolással
Azt szeretnénk elérni, hogy az ismételt oldallekérések között az a tartalom megmaradjon Az ASP.NET előtt is megoldható volt a feladat, csak sokat kellett hozzá kódolni Ennek a műveletnek az elvégzésére az ASP.NET egy egyszerű és beépített szolgáltatással rendelkezik Ez a szolgáltatás a ViewState
A böngésző által visszaküldött (POSTBACK) adatokat feldolgozza a szerver Az egyes vezérlők állapotából hasított (Hash) értéket képez Ezt az értéket hozzáadja a válasz HTML oldalhoz, amelynek egy rejtett mezőjében tárolja el (HIDDEN FIELD) A szerver az elkészített oldalt, a rejtett mezővel egyetemben, válaszként visszaküldi a böngészőnek, HTTP protokoll használatával
További adatok is tárolhatóak benne Ezek az adatok is a rejtett mezőben lesznek eltárolva A ViewState egy dictionary kollekció, amely név-érték párokat tárol Érték hozzáadása a ViewState kollekcióhoz ViewState[”Color”] = ”White”;
Bizonyos esetekben hátrányos lehet a ViewState használata A ViewState kikapcsolható egy-egy vezérlő szintjén, illetve az egész oldalra nézve is ViewState kikapcsolás az egész oldal esetén ViewState kikapcsolása egy vezérlő esetén
Kis méretű adatok tárolása a kliens oldalon Simán olvasható, ha nem titkosított Lehet perzisztált, vagy ideiglenes a memóriában Ezt használja azonosításhoz a WebServer Törölheti a felhasználó Korlátozások
Cookie-k definiálása Response.Cookies[”LastVisit”].Value = DateTime.Now.ToString(); Response.Cookies[”LastVisit”].Expires = DateTime.Now.AddDays(2); Cookie-k olvasása MyLabel.Text = Server.HtmlEncode(Request.Cookies[”LastVisit”].Value);
QueryString Adat a url-ben – ? – után – Minden további paraméter & választ el Hozzáférés: – Request.QueryString[”searchstring”]; – Request.QueryString[”userid”]; amozás&userid=turoczy
A felhasználó teljes munkafolyamatán keresztül tárolhatjuk az adatokat Definiálhatunk az alkalmazás teljes életciklusában elérhető adatokat is Az adatokat a szerveren tároljuk A következőkben két ilyen szolgáltatást fogunk tárgyalni: – Application objektum – Session objektum
Az alkalmazás bármelyik oldaláról hozzáférhetünk, bármelyik felhasználótól érkezett is a kérés Az Application kollekció élettartama: – Akkor jön létre, amikor az első kérés érkezik az alkalmazáshoz – Akkor szűnik meg, amikor az alkalmazás megáll
Amikor a szervert megállítják Amikor a Web-szervert megállítják Amikor a Web site vagy Web Servicet leállítják Valamilyen alkalmazás hiba esetén Az alkalmazás új verziójának a telepítésekor Az alkalmazás bármikor megállhat és erre nincs semmilyen figyelmeztetés!
Az eseménykezelőket a Global.asax fájlban kell megírni Az Application eseményei Esemény neveMikor fut le? Application_StartAlkalmazás indításakor Application_EndAlkalmazás leállításakor Application_ErrorAlkalmazás hiba esetén
Az adatok az egyes felhasználókhoz kötődnek A Session objektum élettartama: – Amikor egy adott felhasználó először kér le egy oldalt – Megszűnik, ha az előre meghatározzott idő letelik, illetve a Session.Abandon metódus meghívásra kerül
Az eseménykezelőket ismét a Global.asax fájlban kell megírni Az Session eseményei Esemény neveMikor fut le? Session_StartSession indításakor Session_EndSession leállításakor
Három tárolási mód van: InProc StateServer SQLServer
Ez az alapértelmezett mód Az alkalmazás folyamatában fut, az adatokat az alkalmazás memóriaterületén tárolja A három közül csak ez a mód támogatja a Session.End eseménykezelőt Az állapotinformációk nem oszthatók meg több szerver között egy adott szerver farmon belül
A Web.Config-ban kell beállítani Külön folyamatban fut, amit ASP.NET State Service-nak nevezünk A Session.End eseménykezelő nem támogatott Az állapotinformációk megoszthatóak több szerver között
Akárcsak az előző esetben, szintén a Web.Config-ban kell beállítani Az adatok Microsoft SQL Server adatbázisban tárolja A Session.End eseménykezelő nem támogatott Az állapotinformációk megoszthatóak több szerver között
Állapotkezelés Felhasználó kezelés Kliensoldali és szerveroldali validáció Globalization
Tulajdonságok halmaza Adat tárolása automatikus SQL Server adatbázisában A visszatérő felhasználót automatikusan azonosítja
Definiálás: … Tárolás: Profile.Nev = nameTextBox.Text; Felhasználás: udvozloLabel.Text = ”Szervusz ” + Profile.Nev + ” !”;
Azonosított – Felhasználó azonosítása, nyomon követése Ismeretlen – Egyedi azonosítót kapnak – Süti vagy az URL részeként – Nem alapértelmezett beállítás – Minden propertybe: allowAnonymous= ”true”
Használat: Profile.Cim.Utca
Beépített, saját adatbázis WebSite Administration Tool (WSAT) Membership és Roles osztályok Login Controls
CreateUserWizard Login LoginView LoginStatus LoginName
CreateUser DeleteUser FindUsersBy , FindUsersByName GeneratePassword GetAllUsers GetNumberOfUsersOnline GetUser, GetUserNameBy UpdateUser ValidateUser
Állapotkezelés Felhasználó kezelés Kliensoldali és szerveroldali validáció Globalization
RequiredFieldValidator a mező értéke nem lehet üres RangeValidator csak adott tartományon belüli érték fogadható el RegularExpressionValidator a reguláris kifejezést kielégítő érték fogadható el ComapareValidator két mező értékének meg kell egyeznie CustomValidator saját egyedi validátor
Miért akkor szól, ha a gombra kattintunk? Csoportba fogalás ValidationGroup tulajdonság Kliensoldali validálás tiltása EnableClientScript tulajdonság false-ra állításával
Állapotkezelés Felhasználó kezelés Kliensoldali és szerveroldali validáció Globalization
Mire valók az erőforrások? Mi a lokális erőforrás? Tárolás: App_LocalResources almappa Formátum: [.kultúra].resx Pl.: Default.hu.aspx, Default.hu-hu.aspx
Generálás VS-val: Tools | Generate Local Resource – Létrehozza a lokális App_LocalResourcest – Minden vezérlőhöz létrehozza a Textet és ToolTipet MyPage – Hozzáadja az erőforráskulcsot a vezérlőkhöz – A frissítése NEM automatikus! Érdemes a fejlesztés végén elvégezni.
Létrehozás Ha megvan a default, copy-paste! Rename-mel átnevezni, értékeket átírni Tesztelés A böngésző beállításaiból az asp.net beállítja a kultúrát A teszteléshez: IE | Tools | Internet Options | Languages | Language Preference | Add, majd Move Up
Bármelyik oldalról elérhetőek Tárolás: root/App_GlobalResources Explicit lokalizálás Létrehozás: Sln explorer Jobb katt a rootra, Add ASP.NET Folder Jobb katt az App_GlobalResources folderre Add New Item…, Resource File, Add Adatok hozzáadása Továbbiak: copy-paste
Deklaratív kötés – Több vezérlőhöz is ugyanazt az erőforrást rendelhetjük – A vezérlő tulajdonságai között: Expressions – Bindable Properties, Expression Type: Resources – ClassKey: global fájl neve, ResourceKey: erőforrás neve Imperatív kötés – Resources.Resource: automatikus, erősen típusos – Ha nem állnak rendelkezésre fordításkor: GetLocalResourceObject, GetGlobalResourceObject
Deklaratívan – Web.config, culture, uiculture Imperatívan – Page.InitializeCulture() Page.Culture: nyelvhez kapcsolt funkciók PageUICulture: betöltendő nyelvi erőforrás
© 2006 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.