Toon posts:

[ASP.NET]Querystring naar Array, naar Session

Pagina: 1
Acties:

Onderwerpen


  • Remz
  • Registratie: Mei 2008
  • Laatst online: 02-06 13:23
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

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:07

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


  • Remz
  • Registratie: Mei 2008
  • Laatst online: 02-06 13:23
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.

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:07

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


  • Remz
  • Registratie: Mei 2008
  • Laatst online: 02-06 13:23
@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.

  • RobIII
  • Registratie: December 2001
  • Laatst online: 01:15

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

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.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • Remz
  • Registratie: Mei 2008
  • Laatst online: 02-06 13:23
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.

  • RobIII
  • Registratie: December 2001
  • Laatst online: 01:15

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

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.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:07

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


  • D-Raven
  • Registratie: November 2001
  • Laatst online: 31-05 20:05
Wat Haan zegt en dan niet:

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


maar..

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

  • 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


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee