Avatar billede hulla Novice
30. december 2002 - 13:15 Der er 11 kommentarer og
1 løsning

lidt generelt

Jeg vil gerne hvis en kunne fortælle mig hvad der rent faktisk sker når man klikker på en knap og ens click metode køres.

F.eks loader den hele siden igen og hvad med session og application variabler, bevarer de deres værdi efter en click metodes kørsel.

Helt konkret har jeg problemer med at en Session variable er tom efter et knap tryk men lige før indeholdt den et array.

vil gerne have en klar forklaring eller et godt link :o)
Avatar billede burningice Nybegynder
30. december 2002 - 14:14 #1
som det første kan du lå trace til, på den måde kan du ned i mindste detalje se hvad der sker fra siden requestes, til at den nedlægges igen på serveren og sendes til klienten
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpcontracefunctionality.asp

Men ja, den loader hele siden igen når du trykker på en knap, da asp.net jo ikke har lavet om på internettets opbygning... og hvis man kender lidt til websider, http osv. så fungerer det på denne måde (en asp.net side)

1) client sender en forespørgsel afsted (via GET)
2) webserver (typisk IIS) modtager forespørgsel
3) webserver sender forespørgsel videre til asp.net worker-process'en
4) asp.net worker-process'en behandler siden (finder evt. ud af om der blev trykket på en knap) og sender outputtet tilbage til webserveren
5) webserver sender siden tilbage til clienten
6) klienten klikker på en knap, og requester siden (denne gang med POST)
7) gå til punkt 2 (dette kaldes også en roundtrip)

Dette er hvad der sker i grove træk, så ja, hele siden requestes igen, og alt efter indstillinger af sessionstate m.m. så bevares sessions og application ved hver roundtrip, ligesom ved andre teknologier som f.eks. php og asp.

Håber forklaringen var god nok, ellers kan jeg anbefale .Net Framework SDK, MSDN samt en god bog, f.eks. Asp.Net fra IDG, Professional Asp.Net fra WROX eller tilsvarende.

Ang. dit specifikke problem, var det så muligt at se noget kode? For det skal virke, ellers var det f.eks. ikke muligt at bruge sessions til loginsystem men det er det ;)
Avatar billede hulla Novice
30. december 2002 - 15:00 #2
ReDim sTemp(1000)

For i = 0 To 1000

    If Checked = "on" Then
        sTemp(i) = Request("Name" & i)
        Count += 1
    End If

Next

Session("sTemp") = sTemp

End Sub

Private Sub cmdSale_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSale.Click

Dim CheckedArray
ReDim CheckedArray(1000)

CheckedArray = Session("sTemp")

Response.write(" Session("stemp")2 = " & CheckedArray(2))


Efter dette udskrives: Session("stemp")2 =

og ikke mere.

Det er ligesom om at det Session array bliver tømt ved at trykke på knappen
Avatar billede hulla Novice
30. december 2002 - 15:01 #3
sådan ser linjen selvfølgelig ud:
Response.write(" Session(stemp)2 = " & CheckedArray(2))
Avatar billede burningice Nybegynder
30. december 2002 - 15:59 #4
jeg kan ikke lige på stående fod svare dig på hvad der er galt med din kode... du kunne måske prøve at forklare dit problem istedet, så kan det være vi kan finde en løsning...

og, sessions bliver bibeholdt ved hvert roundtrip... et lille bevis

http://www.burningice.dk/sjov/sessions.aspx

<%@ Page Language="C#" Debug="true" %>

<script language="C#" runat="server">

void Page_Load(object sender, EventArgs e) {
    if (!Page.IsPostBack) {
        Session["hej"] = "hej";
        hej.InnerHtml = Session["hej"].ToString();
    }
}

void btnHej_Click(object sender, EventArgs e) {
    hej.InnerHtml += Session["hej"].ToString();
}

</script>

<html>
    <head></head>
    <body>
        <form runat="server">
            <div id="hej" runat="server" />
            <asp:button id="btnHej" onClick="btnHej_Click" text="hej" runat="server" />
        </form>
    </body>
</html>
Avatar billede hulla Novice
02. januar 2003 - 08:16 #5
Jeg har sådan set ingen problemer med almindelige session variable, dem bruger jeg meget. Mit problem opstår først når det er et session array jeg bruger.

Mit problem er som følger:

i min pageload har jeg en masse emner som jeg gerne skal bruge i min cmdSale_Click(). Som jeg gør det nu foregår det i et session array, men det virker altså ikke. hvis jeg bruger session variable virker det fint, men det er ikke særlig hensigtsmæssig.

Ved du hvad der er specielt ved Session Array i forhold til Session variable ?
Avatar billede hulla Novice
02. januar 2003 - 09:03 #6
her er slutningen af page load og starten af click metoden:

  Response.Write(" session sTemp 2 = " & Session("sTemp")(2))

End Sub

Private Sub cmdSale_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSale.Click

  Response.Write(" session sTemp 2 = " & Session("sTemp")(2))

I begge response.write er det det samme session array og samme felt, men i pageload skriver den det rigtige men så snart jeg trykker på knappen så er der intet.
Avatar billede burningice Nybegynder
02. januar 2003 - 13:32 #7
du kan gemme alt i en session, så derfor er der ikke forskel på om du gemmer tre tegn, eller et arraylist med 234532 objecter i.... en ting du dog måske har glemt, det er at caste dit array.
Et array er nemlig af typen object, lidt ala variant i det gamle VB...
jeg har lavet et lille ekspempel her:

Først opretter vi array'et, og gemmer det i en session
string[] strArray = {"hej", "med", "dig"};
Session["Array"] = strArray

Når vi så skal vise et element på siden skal vi sørge for at caste session'en til et array
string[] str = (string[])Session["Array"];

Og så kan man skrive det ud
Response.Write str[1]


Det er afprøvet, og virker også i en clickprocedure... du kan selv kigge http://www.burningice.dk/sjov/sessions.aspx

<%@ Page Language="C#" Debug="true" %>

<script language="C#" runat="server">

void Page_Load(object sender, EventArgs e) {
    string[] stringarr = {"hej", "med", "dig"};
    Session["arr"] = stringarr;   
   
    Session["hej"] = "hej";
    if (!Page.IsPostBack) {
        hej.InnerHtml = Session["hej"].ToString();
    }
}

void btnHej_Click(object sender, EventArgs e) {
    hej.InnerHtml += Session["hej"].ToString();
   
    string [] str = (string[])Session["arr"];
    divarr.InnerHtml =     str[2];
}

</script>

<html>
    <head></head>
    <body>
        <form runat="server">
            <div id="hej" runat="server" /><br>
            <div id="divarr" runat="server" />
            <asp:button id="btnHej" onClick="btnHej_Click" text="hej" runat="server" />
        </form>
    </body>
</html>
Avatar billede hulla Novice
02. januar 2003 - 15:43 #8
Deet lyder rigtigt, men jeg kan ikke få et til at virke. Du kender vel ikke et sted hvor jeg kan se et lignende eksempel i VB.net ?
Avatar billede hulla Novice
28. januar 2003 - 10:21 #10
lægger du et svar ? :)
Avatar billede hulla Novice
31. januar 2003 - 09:05 #11
nå nu lukker jeg den altså :o)
Avatar billede burningice Nybegynder
31. januar 2003 - 09:41 #12
dah... hehe, sorry... 30 point ud af vinduet ;) hehe...
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