[ASP.NET] Sessions

Pagina: 1
Acties:

  • Ruudjah
  • Registratie: November 1999
  • Laatst online: 06-09-2025
Ik wil een property, net als in Windows Forms in het geheugen houden. Omdat HTTP stateless is, moet je dat dan server-side in het geheugen opslaan. Dit gaat zoals je weet in een Session object. Dus heb ik de volgende code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//de property
    public string tekst
    {
        get { return (string)Session["tekst"]; }
        set { Session["tekst"] = value; }
    }

//in mijn Page_load:
   this.Label1.Text = this.tekst;

//en natuurlijk de eventhandler:
    protected void Button1_Click(object sender, EventArgs e)
    {
        this.tekst = "jeuj";
    }


Dit werkt alleen niet helemaal goed. Je zou verwachten, dat als je de eerste keer op die button drukt, het session object direct geset wordt. Bij het opnieuw laden van de pagina grabt ie de session variabele en mikt em in de label1. Dit gebeurt, maar pas nadat je een keer extra op button1 hebt geklikt. Waarom pakt-ie de session variabele pas ná de tweede keer klikken?

[ Voor 6% gewijzigd door Ruudjah op 27-07-2006 11:16 ]

TweakBlog


  • PhysicsRules
  • Registratie: Februari 2002
  • Laatst online: 22-12-2025

PhysicsRules

Dux: Linux voor Eenden

Statat de code in Page_load misschien in een
C#:
1
2
3
4
5
if (this.IsPostBack) 
{
//in mijn Page_load:
   this.Label1.Text = this.tekst;
}

Want dan werkt het alleen bij een tweede keer laden.

  • Sensei_D
  • Registratie: Maart 2002
  • Laatst online: 29-01 15:14
Click events worden pas na een Page_Load afgehandeld.
Wat er dus gebeurt als je pagina op de server komt na de eerste click:
- Page Load runt: sessie is leeg en tekst wordt dus met die waarde geladen; leeg
- Button Click runt: sessie wordt ingesteld
- Pagina wordt gerenderd

Bij de 2de click:
Mja zie eerste run, maar nu is sessie ingesteld zie je...

sensei_d.fpv channel


  • Ruudjah
  • Registratie: November 1999
  • Laatst online: 06-09-2025
De code staat niet in een postback routine.

Het click event wordt dus 'te laat' uitgevoerd. Is er een routine die _na_ de clickevents worden afgehandeld?

TweakBlog


  • Sensei_D
  • Registratie: Maart 2002
  • Laatst online: 29-01 15:14
Ruudjah schreef op donderdag 27 juli 2006 @ 11:32:
De code staat niet in een postback routine.

Het click event wordt dus 'te laat' uitgevoerd. Is er een routine die _na_ de clickevents worden afgehandeld?
Mja het renderen van de pagina gebeurt altijd later dus die events kun je gebruiken, maar waarom set je de labeltekst niet meteen in het buttonclick event? Dit zou bijvoorbeeld meteen na het setten van de sessie kunnen plaatsvinden.

sensei_d.fpv channel


  • PhysicsRules
  • Registratie: Februari 2002
  • Laatst online: 22-12-2025

PhysicsRules

Dux: Linux voor Eenden

Je kan een aantal dingen doen:
* In de click-event ook de label setten.
* In de property set de label meteen setten
* Zelf zou ik een SetLabel method schrijven en die vanuit zowel Page_Load als Button_Click aanroepen.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 14-02 12:34

gorgi_19

Kruimeltjes zijn weer op :9

Ruudjah schreef op donderdag 27 juli 2006 @ 11:32:
De code staat niet in een postback routine.

Het click event wordt dus 'te laat' uitgevoerd. Is er een routine die _na_ de clickevents worden afgehandeld?
Een aparte bind method maken, die je zowel in het click-handler als de load-handler aanroept?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • WormLord
  • Registratie: September 2003
  • Laatst online: 01-12-2025

WormLord

Devver

Of het label setten in de Page_PreRender.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 14-02 12:34

gorgi_19

Kruimeltjes zijn weer op :9

WormLord schreef op donderdag 27 juli 2006 @ 12:31:
Of het label setten in de Page_PreRender.
Met het risico om je viewstate om zeep te helpen, als ik het me goed herinner.

Digitaal onderwijsmateriaal, leermateriaal voor hbo

Pagina: 1