Avatar billede telep Nybegynder
03. maj 2005 - 15:49 Der er 15 kommentarer og
1 løsning

Indkøbskurv

Hej venner!

Jeg er igang med at kode en asp.net applikation med C#

Jeg skal have lavet noget der minder om en indkøbskurv som er individuel for hvert enkelt bruger der besøger siden.

min page_load:

        private void Page_Load(object sender, System.EventArgs e)
        {
            if (Session.IsNewSession == true)
            {
                getData();
                kurv = new ArrayList;
            }
            Label5.Text = Session.SessionID;
        }


kurv er erklæret som: static public ArrayList kurv;


Når jeg vil add'e items til kurven bruger jer følgende funktion:

        private void Button3_Click(object sender, System.EventArgs e)
        {
            kurv.Add( new basket(ListBox1.SelectedValue.ToString()));
        }


når jeg vil vise indholdet af kurven i en listbox:

        private void Button4_Click(object sender, System.EventArgs e)
        {
            ListBox2.Items.Clear();
            foreach(webtest.basket ting in kurv)
                ListBox2.Items.Add(ting.getDem());
        }

Men det holder ikke rigtigt... Når to brugere bruger siden samtidigt, bliver de ting de lægger i kurven, så at sige, lagt i begges kruv. Jeg går udfra, at det har noget med det at gøre at jeg erklærer kurven som "static" men gør jeg ikke det - får jeg fejl når jeg forsøger at lægger noget i kurven...

HEEEEEELP!

/telep
Avatar billede arne_v Ekspert
03. maj 2005 - 15:54 #1
Du skal gemme din kurv i Session !
Avatar billede arne_v Ekspert
03. maj 2005 - 15:55 #2
du henter kurv fra Session
hvis den ikke er der new'er du en
så putter du i den
og så gemmer du kruv i Session igen

for hver ændring
Avatar billede faedros Nybegynder
03. maj 2005 - 15:58 #3
Hej telep!

Du har ret i din mistanke. Du skal *ikke* bruge static - det gør kurven global indenfor hele din applikation, dvs. for alle samtidige brugere. Det, du har brug for er en session-scope kurv. Det får du ved at gemme kurven i Session-cachen, noget i den her retning:

        private ArrayList kurv;

        private void Page_Load(object sender, System.EventArgs e)
        {
            if (Session.IsNewSession == true)
            {
                kurv = new ArrayList();
                Session["kurv"] = kurv;
            }
            else
                kurv = Session["kurv"];
        }

Håber det hjælper...
Avatar billede telep Nybegynder
03. maj 2005 - 16:02 #4
Hvad så når jeg vil lægge noget i kurven???
Avatar billede telep Nybegynder
03. maj 2005 - 16:07 #5
c:\inetpub\wwwroot\school\webtest\WebForm1.aspx.cs(44): Cannot implicitly convert type 'object' to 'System.Collections.ArrayList'



kurv = Session["kurv"];

Hvis jeg ikke tager det med får jeg :
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:


Line 104:        private void Button3_Click(object sender, System.EventArgs e)
Line 105:        {
Line 106:            kurv.Add( new basket(ListBox1.SelectedValue.ToString()));
Line 107:        }
Line 108:
Avatar billede telep Nybegynder
03. maj 2005 - 16:08 #6
PLEASE HELP!
Avatar billede faedros Nybegynder
03. maj 2005 - 16:12 #7
BTW, du behøver ikke gemme kurven i Session igen efter ændringer i den - Session indeholder blot en reference til din kurv, og den påvirkes ikke af ændringer til kurven.
Avatar billede arne_v Ekspert
03. maj 2005 - 16:13 #8
kurv = (ArrayList)Session["kurv"];
Avatar billede faedros Nybegynder
03. maj 2005 - 16:14 #9
OK, du skal have et typecast med:

kurv = (ArrayList) Session["kurv"];
Avatar billede arne_v Ekspert
03. maj 2005 - 16:14 #10
rigtigt

du henter kurv fra Session
hvis den ikke er der new'er du en og gemmer i Session
så putter du i den
Avatar billede telep Nybegynder
03. maj 2005 - 16:56 #11
tester det lige om 5. minutter... skulle lige skifte location :-)
Avatar billede telep Nybegynder
03. maj 2005 - 17:09 #12
Sådan - en million tak!

Nå, men hvem skal have point?
Avatar billede arne_v Ekspert
03. maj 2005 - 17:22 #13
vi kunne jo dele ...
Avatar billede telep Nybegynder
03. maj 2005 - 17:26 #14
tja...
faedros lægger du et svar?

/tak igen
Avatar billede telep Nybegynder
03. maj 2005 - 23:43 #15
Hele verden er jo ikke en ventesal - så fuldt udbytte til arne_v!
Avatar billede arne_v Ekspert
04. maj 2005 - 19:57 #16
jeg deler meget gerne - http://www.eksperten.dk/spm/615221
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