[ASP.NET]Querystring naar Array, naar Session

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Remz
  • Registratie: Mei 2008
  • Laatst online: 17-09 14:44
Hallo allemaal,

Ik zit hier met een probleem en ik kom er niet uit. De afgelopen 4 uur zijn mijn hersens gekraakt, en er is niet veel goeds uitgekomen

Scenario:
Ik ben bezig een webshop te bouwen en loop tegen een probleem aan bij artikelen in de winkelwagen te plaatsen. Ik doe dit via een knop "in winkelwagen" die dan naar dezelfde pagina gaat met een query string met het artikelnummer. De pagina telt dan de query string en laat dit aantal zien bij de winkelwagen in een session(aantal artikelen). Nu was ik bezig om ook een lijst van de artikelnummers die in de winkelwagen moeten samen te stellen en deze in een Session te doen, zodat ik deze later weer kan opvragen.

Hier loop ik tegen een probleem aan. Hij stopt de artikelnummers wel in de array, en laat deze zien in de Session, alleen laat hij maar 1 artikel zien, en altijd het laatst ingevoerde. De teller van het aantal artikelen gaat wel omhoog.

Ik heb verschillende manieren geprobeerd en heel Google afgespeurd maar ik kom er niet uit. Arraylists krijg ik niet werkend, op de manier die ik heb gebruikt bij de teller werkt ook niet.

Ik zal hier een stukje code van de teller en de artikelnummer lijst plaatsen(welke niet werkt dus). Ik ben nog een beginnen in ASP.NET en C#.

Ik hoop dat jullie mij tips kunnen geven hoe verder te gaan.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if (Request.QueryString["artikelid"] != null)
            {               
                int artikel = int.Parse(Request.QueryString["artikelid"]);
                int[] Arrayartikelen = new int[20];
                if (Arrayartikelen == null)
                {
                    int tellerartikelen = 0;
                    tellerartikelen += 1;
                    Arrayartikelen[tellerartikelen] = (tellerartikelen);
                    Session["aantal"] = Arrayartikelen[tellerartikelen];
                }
                else
                {
                    int tellerartikelen = Convert.ToInt32(Session["aantal"]);
                    tellerartikelen += 1;
                    Arrayartikelen[tellerartikelen] = (tellerartikelen);
                    Session["aantal"] = Arrayartikelen[tellerartikelen];
                }


Artikellijst naar Session(niet werkend)
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
                int tellerartikelnummers;

                int[] artikelnummers = new int[20];
                if (artikelnummers == null)
                {
                    tellerartikelnummers = 0;
                    tellerartikelnummers += 1;
                    //artikelnummers[tellerartikelnummers] = (artikel);
                    //Session["artikelnummers"] = artikelnummers[tellerartikelnummers];
                }
                else
                {
                    tellerartikelnummers = Convert.ToInt32(Session["artikelnummers"]);
                    tellerartikelnummers += 1;
                    //artikelnummers[tellerartikelnummers] = (artikel);
                    //Session["artikelnummers"] = artikelnummers[tellerartikelnummers];
                }


Alvast bedankt!

Thom

Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 11:39

Haan

dotnetter

Ik weet niet wat je probeert te bereiken met deze constructie?
C#:
1
2
3
4
5
6
7
8
9
int[] artikelnummers = new int[20]; 
if (artikelnummers == null) 
{
..
}
else
{
..
}

Je ziet hopelijk dat die check op null nooit true op gaat leveren?

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • Remz
  • Registratie: Mei 2008
  • Laatst online: 17-09 14:44
Haan schreef op dinsdag 21 juni 2011 @ 15:03:
Ik weet niet wat je probeert te bereiken met deze constructie?
C#:
1
2
3
4
5
6
7
8
9
int[] artikelnummers = new int[20]; 
if (artikelnummers == null) 
{
..
}
else
{
..
}

Je ziet hopelijk dat die check op null nooit true op gaat leveren?
Zoals ik al zei, ik ben nog redelijk beginner in C# en ASP.
Dat heb ik zo gedaan dat hij de teller verhoogd, omdat hij in de Page_Load zit, en anders zou hij steeds op 0 moeten komen omdat er een getal verplicht is.

Maar dat was nog niet mijn probleem, dat stukje werkt zowaar! Dat ik veel fouten in mijn code heb weet ik, ik heb puur hulp nodig nu om query strings in een array te doen, en die array dan weer in een session te stoppen en dan weer uit te lezen.

Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 11:39

Haan

dotnetter

Laten we eens een stukje van jouw code voorzien van wat commentaar:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int artikel = int.Parse(Request.QueryString["artikelid"]);
int[] Arrayartikelen = new int[20];
if (Arrayartikelen == null)
{
    // deze code wordt nooit uitgevoerd!
    int tellerartikelen = 0;
    tellerartikelen += 1;
    Arrayartikelen[tellerartikelen] = (tellerartikelen);
    Session["aantal"] = Arrayartikelen[tellerartikelen];
}
else
{
    // Arrayartikelen is hier een array met 20 keer 0
    // stel: "aantal" = 1
    int tellerartikelen = Convert.ToInt32(Session["aantal"]);
    // tellerartikelen = 1
    tellerartikelen += 1;
    // tellerartikelen = 2
    Arrayartikelen[tellerartikelen] = (tellerartikelen);
    // Arrayartikelen[2] = 2
    // Arrayartikelen is nu [0,0,2,0,0,..]
    Session["aantal"] = Arrayartikelen[tellerartikelen];
    // Session["aantal"] = 2
}

Ik weet niet precies wat je probeert te doen, maar ik denk dat je een denkfout maakt bij het vullen van Arrayartikelen.

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • Remz
  • Registratie: Mei 2008
  • Laatst online: 17-09 14:44
@Haan

Bedankt voor het commentaar. Ik ga er nog is goed naar kijken!
Ik heb van een medestudent gehoord dat ik ook nog is beter moest gaan kijken naar Arraylists, dat zou moeten helpen.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Array of arraylist is, tbh, wel je minste probleem. Ik zou als ik jou was nog een keer voorgaand(e) hoofdstuk(ken) doornemen want het ontbreekt je aan basisbeginselen of ze zitten er iig nog niet goed in. En dat klinkt lulliger dan ik het bedoel, maar wat extra oefening daarin lijk me momenteel verstandiger dan "omdat Pietje het zegt" een ArrayList nemen zonder te weten wat 't verschil is.

Een andere vaardigheid waar je veel plezier van gaat hebben is Debuggen. Verdiep je daar ook even in, want het maakt je leven veel makkelijker (en je zult je code ook beter begrijpen als je er door heen stapt).

[ Voor 26% gewijzigd door RobIII op 21-06-2011 22:04 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Remz
  • Registratie: Mei 2008
  • Laatst online: 17-09 14:44
Ga ik doen ja. Misschien heb ik dit topic iets te overhaast gemaakt.
Wat mij betreft kan er een slotje op. Zelf proberen is natuurlijk altijd leuker.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Een slotje is niet nodig ;) Zie daarvoor ook onze faq betreffende topiceinde.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 11:39

Haan

dotnetter

Arraylists in .NET zijn trouwens al sinds .NET versie 2.0 (released in 2005) af te raden om te gebruiken, dus ik zou niet al te veel waarde hechten aan wat die medestudent zegt ;) In .NET gebruik je een List (wat in Java een Arraylist is, dat wil nog wel eens voor verwarring zorgen :P )

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 10-09 20:32
Wat Haan zegt en dan niet:

C#:
1
List mijnList = new List();


maar..

C#:
1
List<int> mijnList = new List<int>();

Acties:
  • 0 Henk 'm!

  • Rinzler
  • Registratie: Februari 2011
  • Laatst online: 13-10-2022

Rinzler

You. Just. Did.

Haan schreef op woensdag 22 juni 2011 @ 10:20:
Arraylists in .NET zijn trouwens al sinds .NET versie 2.0 (released in 2005) af te raden om te gebruiken, dus ik zou niet al te veel waarde hechten aan wat die medestudent zegt ;) In .NET gebruik je een List (wat in Java een Arraylist is, dat wil nog wel eens voor verwarring zorgen :P )
Misschien er best ineens bij zetten waarom hij geen arraylist mag gebruiken :) (was het zelf even kwijt, bij deze ineens hier even plaatsen)

ArrayList is niet typed. (/facepalm, just!) Maw, je kan er zowel strings, integers, doubles allemaal door elkaar in steken. Je kan beter generic lijsten gebruiken zoals de List class die Haan aangeeft :) dit geeft gewoon properdere code die minder vaak tot fouten gaat lijden. (Je moet niet meer heel de tijd casten enzo)

Ik snap ook niet precies wat TS wil doen.
Hij stopt de artikelnummers wel in de array, en laat deze zien in de Session, alleen laat hij maar 1 artikel zien, en altijd het laatst ingevoerde
In de session zit dus altijd maar 1 artikel? Ik denk dat dit kan liggen aan de manier waarop je je session in vult.

Probeer hier eens te kijken (bijna allemaal berichten van ondertussen 2005, maar de oplossingen die daar staan zouden het nog altijd moeten doen):
http://www.velocityreview...09486-session-arrays.html
http://bytes.com/topic/c-...ng-array-session-variable
http://www.dotnetmonster..../14209/Session-array-in-c

Ik denk dus dat het misschien hier aan ligt:
C#:
1
Session["aantal"] = Arrayartikelen[tellerartikelen];


Probeer eens:
C#:
1
Session["aantal"](tellerartikelen) = Arrayartikelen[tellerartikelen];


Je kan dacht ik ook gewoon, als je array volledig is gewoon een session gelijk stellen aan een array en dan daar na terug oproepen.
C#:
1
2
3
4
5
6
7
8
9
String[] myArray = new String[5];

myArray[0] = "abc";
myArray[1] = "def";
myArray[2] = "ghi";
myArray[3] = "jkl";
myArray[4] = "mno";
 
Session["mySession"] = myArray;


Je kan dan ofwel de data opnieuw in een array steken, of deze vanuit de session uitlezen als je de bovenstaande leden omwisselt. Ik hoop dat ik het goed heb begrepen en dit misschien je probleem op lost.

Denkt aleer ge doende zijt en doende denkt dan nog! - PSN: Peunbrechts

Pagina: 1