HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Application property, avagy a HttpApplicationState osztály


Page osztály 1. rész

Példaprogram letöltése

11193 bájt

Amikor létrehozunk egy ASP.NET Web alkalmazást, akkor ott az egyes Web Form-ok a System.Web.UI.Page osztályból származnak. Most induló cikksorozatunkban e Page osztállyal ismerkedünk meg részletesen, hogy egy-egy Web Form minden lehetőségét maximálisan ki tudjuk használni.
Mostani első részben az Application property-t vesszük szemügyre, mely HttpApplicationState osztály típusú.

A HttpApplicationState osztály képes arra, hogy tetszőleges adatokat tároljon, melyek alkalmazásunkra nézve globálisak. Így attól függetlenül, hogy alkalmazásunkhoz hány kérés érkezik egyidejűleg, vagyis hány szál fut a programunkból, ez a közös adattár mindig elérhető, így a programunk egyes szálai között akár adatokat is átadhatunk.
Mivel az elhelyezhető adattípus Object, így tulajdonképpen bármilyen adatot, objektumot tárolhatunk későbbi felhasználás céljára.
Az adatok tárolásához mindegyiknek kell adnunk egy nevet, mely egy tetszőleges sztring lehet. A tárolás egy olyan konténerbe történik, melyből vagy a megadott név alapján, vagy a sorszám alapján kereshetjük elő adatainkat.
Adat elhelyezésére a HttpApplicationState osztály Add függvénye szolgál. Itt első paraméterként a tárolandó objektumnak választott nevet kell megadnunk, majd ezt követően a tárolandó adatot. Mellékelt példában a TextBox1-be írt szöveget tároljuk el, melynek DataX nevet adunk, ahol az X egy nullától induló sorszám.
    private void Button1_Click(object sender, System.EventArgs e)
    {
      Application.Add("Data"+Application.Count.ToString(), TextBox1.Text);      
    }
Hogy hány adat került már tárolásra, azt a Count property árulja el számunkra.
  private void Page_Load(object sender, System.EventArgs e)
  {
      Label1.Text = "Count: " + Application.Count.ToString();
   }
Mellékelt példában a WebForm2.aspx lapon listázzuk ki a már tárolt adatokat, illetve itt valósítjuk meg az adatok közötti törlés lehetőségét is.
A listázást úgy oldjuk meg, hogy egy ListBox-ba írjuk az összes eltárolt adatot. Tesszük ezt a lap megjelenítésekor a Load eseménynél.
  private void Page_Load(object sender, System.EventArgs e)
  {
      if (!IsPostBack)
      {
        ListBox1.Items.Clear();
A HttpApplicationState osztály AllKeys property-jén keresztül kapunk egy olyan tömböt, melynek minden eleme egy sztring. Ezek a sztringek az Add függvénynél használt nevek lesznek. Ha tehát végigmegyünk ezen a tömbön, akkor egyesével, név alapján lekérdezhetjük az adatokat.
        foreach(string s in Application.AllKeys)
        {
A HttpApplicationState osztály Item indexelőjén keresztül érhetjük el az adatokat. Itt két lehetőségünk is van: vagy a kívánt elem nevét adjuk meg, vagy pedig sorszámát, mely 0 és Count-1 közötti szám lehet.
          ListBox1.Items.Add((string)Application[s]);
        }
      }
    }
Ha arra lenne szükségünk, hogy egy adott sorszámú elemnek a nevét tudjuk meg, akkor a GetKey függvényt kell meghívnunk, paraméterként átadva a kérdéses sorszámot, visszatérési értékként megkapjuk a keresett nevet.
Egy adott elem értékét kiolvasni a Get függvénnyel is lehet. Itt paraméterként szintén a kívánt elem nevét kell megadni sztringként, vagy pedig annak sorszámát.
Az Item-en keresztül nem csak kiolvasható, hanem meg is változtatható egy-egy adat értéke.
  Applicaiton[2] = ”new value”;
Természetesen a Get ellentéte is létezik. Ez a Set függvény, mellyel fenti értékadás épp úgy elvégezhető. Itt első paraméterként az adat nevét kell megadnunk, másodikként pedig értékét.
  Application.Set(”Data3”, ”new value”);
Az adatok megváltoztatásánál problémát okozhat, hogy több egyidejű kérés esetén programunk másik szála is ugyanahhoz az adathoz próbál meg hozzáférni. Ezt a hibát kivédendő alkalmazzuk a Lock – UnLock függvény párost. A Lock hívása megakadályozza, hogy egy másik folyamat hozzáférjen az adatokhoz. Ez az akadály az UnLock hívásával hárul el, így e kettő között nyugodtan adhatunk új értéket.
Application.Lock();
Application["Data3"] = ”new value”;
Application.UnLock();
Egy-egy elemet törölni a RemoveAt függvénnyel lehet. Itt paraméterként a törlendő elem sorszámát kell megadni. Mellékelt példában a ListBox-ban kijelölt elemet törölhetjük a RemoveAt gomb lenyomásával.
    private void Button1_Click(object sender, System.EventArgs e)
    {
      if (ListBox1.SelectedIndex>-1)
      {
        Application.RemoveAt(ListBox1.SelectedIndex);
        Response.Redirect("WebForm2.aspx");
      }
    }
Ha nem sorszám alapján, hanem név alapján szeretnénk megtalálni és törölni egy adatot, akkor használjuk a Remove függvényt, melynek paraméterként a törlendő adat nevét kell átadnunk.
Ha az összes elemet egy lépésben szeretnénk törölni, akkor a RemoveAll függvény használatos. Adott még egy Clear függvény is, mely funkciójában ugyanezt a célt szolgálja.
    private void Button2_Click(object sender, System.EventArgs e)
    {
      Application.RemoveAll();
      Response.Redirect("WebForm2.aspx");
    }
A mellékelt példa lefordítása után futtassuk azt, majd tároljunk el több adatot is. Ezután indítsunk el több példányban böngészőt és mindegyikkel címezzük meg a példánk második lapját (http://localhost/Page01/WebForm2.aspx). Látható lesz, hogy minden böngészőben megjelennek a tárolt adatok.

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2001 évkönyv 307. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |