Avatar billede korup Nybegynder
01. februar 2007 - 12:14 Der er 11 kommentarer og
2 løsninger

Brug af Session i Page_Load

Hej Eksperter

Jeg har en side hvor jeg har en knap, når man trykker på knappen opdateres en session, men jeg skal klikke 2 gange for at indholdes af session vises på min side.


Når man trykker på knappen sættes der en Session["knap"] værdi, og der sker et PostBack.

Men ved hvis jeg prøver at bruge Session["knap"] fra Page_Load, er den altid en gang forsinket.

--------------- Kode ------------------------
private void Page_Load(object sender, System.EventArgs e)
{
if (IsPostBack)
{
if (Session["Knap"] != null)
{
TESTmsg.Text = Session["Knap"].ToString();
}
}
}

private void Imagebutton1_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
Session["Knap"] = 1;
}

------------- kode slut ---------------------

Håber der er nogen der kan se hvad der lige kan være galt eller fortælle hvad jeg ellers kan bruge til at indholde en værdi fra et knap tryk..

/korup
Avatar billede mikkel_sommer Nybegynder
01. februar 2007 - 12:47 #1
Tror det er fordi page_load bliver kørt før og ikke efter Imagebutton1_Click.
Hvis du vil have den vist på siden skal du også sætte

TESTmsg.Text = Session["Knap"].ToString();

ind i Imagebutton1_Click

altså:

private void Imagebutton1_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
  Session["Knap"] = 1;
  TESTmsg.Text = Session["Knap"].ToString();
}
Avatar billede korup Nybegynder
01. februar 2007 - 13:36 #2
Det kan jeg desværre ikke da TESTmsg ligger i selve aspx filen og knappen ligger i en tilknyttet User Web Control.
Avatar billede crazysnap Seniormester
01. februar 2007 - 13:58 #3
Hej korup,

Det er præcis som mikkel sommer siger. Page_Load bliver kaldt før eventuelle click events. Så der sker følgende:

1) Siden loades, Page_Load kaldes og IsPostBack returnerer false (den kommer ikke ned i "if")
2) Der klikkes på knappen.
3) Page_Load kaldes Session["Knap"] er lig med null Testmsg.Text bliver derfor ikke sat
4) Imagebutton1_Click eventen bliver kaldt og sætter Session["Knap"] = 1;

Som du kan se bliver Session["Knap"] først sat efter Page_Load. For at løse det kunne du jo refresh'e siden lige efter du har sat Session["Knap"] variablen i click event'en.

:)

Mvh.

- Snap
Avatar billede crazysnap Seniormester
01. februar 2007 - 14:02 #4
Kunne måske lige for pædagogiske årsager vise dig refreshingen:

private void Imagebutton1_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
    Session["Knap"] = 1;
    Page.Response.Redirect(Page.Request.Url.ToString(), true);
}

:)

Mvh.

- Snap
Avatar billede kalp Novice
01. februar 2007 - 14:34 #5
lidt hokus pokus med AJAX og så er det problem løst på en pæn måde.
http://www.w3schools.com/ajax/ajax_intro.asp
Avatar billede mikkel_sommer Nybegynder
01. februar 2007 - 15:00 #6
Du kan også definere et event på din aspx side som du så raiser fra din usercontrol derved kan du sætte værdier i kontroller på din aspx side med værdier fra din usercontrols.
Avatar billede dr_chaos Nybegynder
01. februar 2007 - 19:46 #7
Jeg vil anbefale dig at bruge mikkel sommers løsning.
Avatar billede korup Nybegynder
01. februar 2007 - 20:59 #8
I skulle ikke ligge inde ned et lille eksempel :)
Avatar billede mikkel_sommer Nybegynder
01. februar 2007 - 22:38 #9
På din aspx side definere du eventet således:

private void setMsgText()
{
    TESTmsg.Text = Session["Knap"].ToString();
}

og på din ascx:

private void Imagebutton1_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
    Session["Knap"] = 1;
    RaiseEvent setMsgText();
}


Du kan også vælge at parse din tekst med som parameter i stedet for af hive den ud af Session, det er op til dig selv:

private void setMsgText(string text)
{
    TESTmsg.Text = text;
}

og på din ascx:

private void Imagebutton1_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
    Session["Knap"] = 1;
    RaiseEvent setMsgText(Session["Knap"].ToString());
}
Avatar billede mikkel_sommer Nybegynder
01. februar 2007 - 22:40 #10
hov det der RaiseEvent er VB i C# er det vist noget med:

if (setMsgText!= null)
{
    setMsgText();
}
Avatar billede korup Nybegynder
06. marts 2007 - 14:58 #11
Hejsa

Jeg er kommet frem til at bruge QueryString til at komme frem og tilbage imellem mine UserControls..

Smid et svar så deler jeg point mellem jer :)

/Korup
Avatar billede mikkel_sommer Nybegynder
07. marts 2007 - 09:09 #12
Svar :)
Avatar billede korup Nybegynder
24. maj 2007 - 09:39 #13
Takker for hjælpem :)

/korup
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester