AspNet.sk     Diskusné fóra     Vitajte v QuickStarts     ASP.NET     Silverlight     Ako môžem...? (en)     Class prehliadač Príklady chcem v ...   
Menu
Skip Navigation Links.
Späť na ASP.NET príručku

ASP.NET QuickStart Príručka

Riadenie stavu

Riadenie stavu je dôležitým aspektom každej aplikácie. Pretože informácie o stave sa strácajú medzi následnými požiadavkami, ASP.NET poskytuje množstvo možností uchovať stav aj na strane servera aj na strane klienta, keď Vaša aplikácie alebo ovládací prvok potrebuje uchovanie informácie cez požiadavky. Táto sekcia ukazuje niektoré z dostupných funkcii riadenia stavu.

Využívanie aplikačného stavu

Táto ukážka načrtáva použite aplikačného stavu (application state) na prečítanie súboru dát v Application_Start. Kolekcia HttpApplicationState použitá vyššie je primárne určená pre spätnú kompatibilitu s klasickým ASP a bude dôverne známa ASP vývojárom. Avšak používanie statických polí v ASP.NET je štandardne preferované cez použite HttpApplicationState.

VB Application State
Run Sample View Source

Pretože k aplikácii a všetkým objektom, ktoré uchováva, môže byť súbežne pristupované rôznymi vláknami, je lepšie uchovať iba občas modifikované údaje, ktoré sa týkajú aplikácie ako celku. V zásade je objekt spúšťaný udalosťou Application_Start a predošlý prístup je len na čítanie (read-only).

V nasledujúcej ukážke je súbor čítaný počas udalosti Application_Start (definovanej v súbore Global.asax) a obsah je uchovaný v objekte DataView v aplikačnom stave.


Sub Application_Start()
    Dim ds As New DataSet()

    Dim fs As New FileStream(Server.MapPath("schemadata.xml"),
        FileMode.Open,FileAccess.Read)
    Dim reader As New StreamReader(fs)
    ds.ReadXml(reader)
    fs.Close()

    Dim view As New DataView (ds.Tables(0))
    Application("Source") = view
End Sub
VB

V metóde Page_Load, je potom vyvolaný DataView a použitý na naplnenie objektu GridView:


Sub Page_Load(sender As Object, e As EventArgs)
    Dim Source As New DataView  = CType(Application("Source"), DataView)
    ...
    MyGridView.DataSource = Source
    ...
End Sub
VB

Výhodou tohoto riešenia je, že iba prvá požiadavka platí za získanie dát. Všetky následné požiadavky používajú už existujúci DataView objekt.

Používanie Session State

Nasledujúca ukážka načrtáva používanie session state pre uchovanie nastavení užívateľa.

VB Session State
Run Sample View Source

Pre poskytovanie individuálnych dát užívateľovi počas session, môžu byť údaje uchované, ktoré sa týkajú aktuálnej session (aktuálneho sedenia). V nasledujúcej ukážke sú hodnoty pre používateľské nastavenia spúšťané udalosťou Session_Start v súbore Global.asax .


Sub Session_Start()
    Session("BackColor") = "beige"
    ...
End Sub
VB

Na nasledujúcej stránke sú hodnoty pre používateľské nastavenia modifikované v Submit_Click udalosti podľa vstupu používateľa.


Protected Sub Submit_Click(sender As Object, e As EventArgs)
    Session("BackColor") = BackColor.Value
    ...

    Response.Redirect(State("Referer").ToString())
End Sub
VB

Jednotlivé hodnoty sú vyvolávané použitím metódy GetStyle:


Protected GetStyle(key As String) As String
    Return(Session(key).ToString())
End Sub
VB

Metóda GetStyle je použitá na vytvorenie štýlov špecifických pre session:
<style>
    body
    {
      font: <%=GetStyle("FontSize")%> <%=GetStyle("FontName")%>;
      background-color: <%=GetStyle("BackColor")%>;
    }
    a
    {
        color: <%=GetStyle("LinkColor")%>
    }
</style>
Pre overenie, či sú hodnoty naozaj uchované v session, si otvorte ukážku druhýkrát, potom zmeňte jednu hodnotu v prvom okne prehliadača a obnovte druhé okno. Druhé okno zozbieralo zmeny, pretože obidve inštancie prehliadača zdieľajú spoločný objekt Session.

Konfigurovanie session state: Funkcie Session state môžu byť konfigurované cez sekciu <sessionState> v súbore web.config. Pre zdvojnásobenie prednastaveného časového limitu 20 minút, môžete pridať nasledovné do súboru web.config aplikácie:
<sessionState
  timeout="40"
/>
Ak nie sú povolené cookies môže byť session identifikované pridaním session identifikátora do URL. To môže byť povolené nastavením nasledovného:
<sessionState
  cookieless="true"
/>
Štandardne, ASP.NET uchová stav session v rovnakom procese, ktorý spracováva požiadavku, tak ako to robí ASP. Navyše môže ASP.NET uchovať dáta zo session v externom procese, ktorý môže dokonca sídliť na inom počítači. Pre povolenie tejto vlastnosti:
  • Spustite ASP.NET state service, buď použitím Services snap-in alebo vykonaním "net start aspnet_state" v príkazovom riadku. State service bude štandardne načúvať na porte 42424. Pre zmenu portu, zmeňte hodnotu v registroch (registry key) pre službu: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\Port
  • Nastavte atribút mode sekcie <sessionState> na hodnotu "StateServer".
  • Nakonfigurujte atribút stateConnectionString s hodnotami stroja (machine), na ktorom ste spustili aspnet_state.
Nasledujúca ukážka predpokladá, že služba state service beží na tom istom počítači ako webový server ("localhost") a používa štandardný port (42424):
<sessionState
  mode="StateServer"
  stateConnectionString="tcpip=localhost:42424"
/>
Všimnite si, že ak vyskúšate s týmito nastavenia ukážku vyššie, môžete reštartnuť webový server (vložte iisreset do príkazového riadka) a hodnota v session pretrvá.

Používanie cookies na strane klienta

Nasledujúca ukážka načrtáva použite cookies na strane klienta pre uchovanie užívateľských nastavení.

VB Cookies
Run Sample View Source

Uchovávanie cookies u klienta je jednou z metód, ktoré metóda session state používa pre spojenie požiadaviek so sessions. Cookies môžu byť taktiež použité priamo pre zotrvanie dát počas požiadaviek, ale potom sú dáta uchované u klienta a odosielané na server s každou požiadavkou. Prehliadače ustanovujú limity na veľkosti cookies; Z tohto dôvodu je garantovanou maximálne prípustnou veľkosťou iba 4096 bajtov.

Keď sú dáta uchované u klienta, metóda Page_Load v súbore cookies1.aspx skontroluje, či užívateľ odoslal cookie. Ak nie, je vytvorené nové cookie a je spustené a uchované u klienta:


Protected Sub Page_Load(sender As Object, e As EventArgs)
    If Request.Cookies("preferences1") = Null Then
        Dim cookie As New HttpCookie("preferences1")
        cookie.Values.Add("ForeColor", "black")
        ...
        Response.Cookies.Add(cookie)
    End If
End Sub
VB

Na tej istej stránke je opäť použitá metóda GetStyle pre poskytnutie jednotlivých hodnôt uchovaných v cookie:


Protected Function GetStyle(key As String) As String
  Dim cookie As HttpCookie = Request.Cookies("preferences1")
  If cookie <> Null Then
    Select Case key
      Case "ForeColor"
        Return(cookie.Values("ForeColor"))
      Case ...
    End Select
  End If
  Return("")
End Function
VB


Otvorením a modifikovaním vlastností stránky cookies1.aspx skontrolujte, či ukážka funguje. Otvorte stránku v ďalšom okne, mala by prevziať nové vlastnosti. Zatvorte všetky okná prehliadača a opätovne otvorte stránku cookies1.aspx. Toto by malo vymazať dočasný cookie a obnoviť prednastavené hodnoty vlastností.

VB Cookies (trvalé)
Run Sample View Source

Na vytvorenie trvalých cookie pomedzi session musí byť vlastnosť Expires v triede HttpCookie nastavená na dátum v budúcnosti. Nasledujúci kód v stránke customization.aspx je identická ako predošlá ukážka, s výnimkou priradenia k Cookie.Expires:


Protected Sub Submit_Click(sender As Object, e As EventArgs)
    Dim cookie As New HttpCookie("preferences2")
    cookie.Values.Add("ForeColor",ForeColor.Value)
    ...
    cookie.Expires = DateTime.MaxValue ' Never Expires

    Response.Cookies.Add(cookie)

    Response.Redirect(State("Referer").ToString())
End Sub
VB

Funkčnosť ukážky overte modifikovaním hodnoty, zatvorením všetkých okien prehliadača, a opätovným otvorením cookies2.aspx. Okno by stále malo ukazovať nastavenú hodnotu

Používanie View State

Táto ukážka načrtáva používanie vlastnosti ViewState pre uchovanie hodnôt špecifických pre požiadavku.

VB View State
Run Sample View Source

ASP.NET poskytuje prístup zo strany servera na view state pre každý ovládací prvok. Ovládací prvok môže ukladať svoj vnútorný stav medzi požiadavkami použitím vlastnosti ViewState na inštanciu triedy StateBag. Trieda StateBag poskytuje rozhranie podobné slovníku pre uchovanie objektov priradeným ku kľúču.

Súbor pagestate1.aspx zobrazuje jeden viditeľný panel a uchováva jeho index vo View State stránky s kľúčom PanelIndex:


Protected Sub Next_Click(sender As Object, e As EventArgs)
    Dim PrevPanelId As String = "Panel" + ViewState("PanelIndex").ToString()
    ViewState("PanelIndex") = CType(ViewState("PanelIndex") + 1, Integer)
    Dim PanelId As String = "Panel" + ViewState("PanelIndex").ToString()
    ...
End Sub
VB

Všimnite si, že keď otvoríte stránku vo viacerých oknách prehliadača, každé okno prehliadača spočiatku ukáže panel s menami. Každé okno sa môže nezávisle pohybovať medzi panelmi.
Microsoft .NET Framework SDK QuickStart Tutorials Version 2.0
Copyright © 2005 Microsoft Corporation. All rights reserved.
Preklad do slovenského jazyka - Copyright © 2005 - 2007 www.aspnet.sk, www.qsh.sk
Pošlite komentár k tejto stránke
Copyright © 2002 - 2008 Chastia, spol. s r. o., Igor Stanek, Designed by Lacino
Portál je hostovaný na serveroch firmy Quantasoft - www.qsh.sk.