[C#] Lijst variabelen in session *

Pagina: 1
Acties:

  • B2
  • Registratie: April 2000
  • Laatst online: 15:13

B2

wa' seggie?

Topicstarter
Bij een webapplicatie voor scholieren is er de mogelijkheid om vragen te oefenen cq. toetsen te maken. Voor het opslaan van een reeks antwoorden uit een aantal vragen dacht ik gebruik te maken van de toch al aanwezige session. Alleen nu vraag ik me af hoe het mogelijk is om meerdere variabelen in 1 sessie 'key' te zetten. Even helder uitgelegd : Ik wil het vraag id en het gegeven antwoord opslaan in de sessie.

Nu dacht ik aan een array in de sessie, maar daar kan ik niet echt veel over vinden. Ik had ook wat gehoord van een collectie, maar volgens mij zijn dat toch alle waardes uit de sessie?
Dit dus:

code:
1
2
Session["Message"] = "MyMsg";
Session["AppStartTime"] = DateTime.Now;


Wat is de beste manier om meerdere variabelen in een zo'n key op te slaan?

[ Voor 16% gewijzigd door B2 op 02-06-2004 11:30 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:53
Zoals hier al gezegd kan je zelf ook ff een nieuwe topictitel voorstellen:
**** Over topictitels in P&W - Updated 9 mei 04 ****

Over je probleem: je kan natuurlijk een ArrayList, Hashtable, oid in een sessie-variabele zetten.

[ Voor 26% gewijzigd door whoami op 02-06-2004 11:26 ]

https://fgheysels.github.io/


  • B2
  • Registratie: April 2000
  • Laatst online: 15:13

B2

wa' seggie?

Topicstarter
whoami schreef op 02 juni 2004 @ 11:25:
Zoals hier al gezegd kan je zelf ook ff een nieuwe topictitel voorstellen:
**** Over topictitels in P&W - Updated 9 mei 04 ****

Over je probleem: je kan natuurlijk een ArrayList, Hashtable, oid in een sessie-variabele zetten.
Ik heb even wat rond gegoogled, en naar ik nu kan opmaken kan een Arraylist geen multidimensionale arrays aan? Ik wil dus een id nummer van een vraag opslaan en het antwoord.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Ter toelichting op whoami: Session is een collection van objects, en kun je dus naast strings, Int16's en dates ieder object induwen wat je wil. De volgende code is dus valide:
C#:
1
2
        Session["PreviousPageViews"] = new string[5];
        ((string[])Session["PreviousPageViews"])[0] = "Whatever";

(Netheid hebben we het even niet over, gaat om het voorbeeld ;) )

Professionele website nodig?


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:53
Een ArrayList kan objecten bevatten.
Je kan dus een class maken die er als volgt uitziet:

code:
1
2
3
4
5
6
class MyClass
{
     private int _vraagId;
     private string _antwoord;
     ....
}


En dan kan je objecten van het type MyClass in die ArrayList zetten. IMO is dit ook een betere oplossing dan te werken met multi-dim arrays.

https://fgheysels.github.io/


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

B2 schreef op 02 juni 2004 @ 11:55:
[...]


Ik heb even wat rond gegoogled, en naar ik nu kan opmaken kan een Arraylist geen multidimensionale arrays aan? Ik wil dus een id nummer van een vraag opslaan en het antwoord.
Kijk eens naar System.Collections.Specialized.NameValueCollection:

C#:
1
2
3
4
5
6
7
8
Session["Questionnaire"] = new NameValueCollection();
        
// ...
        
NameValueCollection collection = (NameValueCollection)Session["Questionnaire"];
collection.Add("Hoe heet je?", "Pietje!");
collection.Add("Hoe oud ben je?", "21");
collection.Add("Hoe lang ben je?", "1.88m");

Professionele website nodig?


  • B2
  • Registratie: April 2000
  • Laatst online: 15:13

B2

wa' seggie?

Topicstarter
curry684 schreef op 02 juni 2004 @ 11:56:
Ter toelichting op whoami: Session is een collection van objects, en kun je dus naast strings, Int16's en dates ieder object induwen wat je wil. De volgende code is dus valide:
C#:
1
2
        Session["PreviousPageViews"] = new string[5];
        ((string[])Session["PreviousPageViews"])[0] = "Whatever";

(Netheid hebben we het even niet over, gaat om het voorbeeld ;) )
Ik heb nu even het volgende snel geprobeerd:

code:
1
2
3
Session["vragen_collectie"] = new String[10];
((string[])Session["vragen_collectie"])[0]["vraag_id"] = "1";
((string[])Session["vragen_collectie"])[0]["antwoord"] = "weet het niet";


Dat werkt natuurlijk niet, maar zo ongeveer moet ik het wel hebben. Zou het op ongeveer deze manier kunnen?

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:53
Natuurlijk werkt dat niet, je declareert een gewone array en je gebruikt 'm als een multidimensionale array.
Waarom gebruik je geen Hashtable, namevaluecollection, arraylist icm custom objects oid?

https://fgheysels.github.io/


  • B2
  • Registratie: April 2000
  • Laatst online: 15:13

B2

wa' seggie?

Topicstarter
curry684 schreef op 02 juni 2004 @ 12:00:
[...]

Kijk eens naar System.Collections.Specialized.NameValueCollection:

C#:
1
2
3
4
5
6
7
8
Session["Questionnaire"] = new NameValueCollection();
        
// ...
        
NameValueCollection collection = (NameValueCollection)Session["Questionnaire"];
collection.Add("Hoe heet je?", "Pietje!");
collection.Add("Hoe oud ben je?", "21");
collection.Add("Hoe lang ben je?", "1.88m");
Wat betekenen die 2 waarden nou? Ik moet gewoon een simpele multidimensionale array opslaan in een sessie zoals dat in PHP zo makkelijk kan. Dat moet toch heel simpel kunnen? Iets in de zin van:

Session["array_vragen"][0]["vraag_id"] = 10;
Session["array_vragen"][0]["antwoord"] = "ik denk dat het antwoord 5 is";
Session["array_vragen"][1]["vraag_id"] = 11;
Session["array_vragen"][1]["antwoord"] = "ik denk dat het antwoord 20 is";

Op deze manier kan ik de waarden ook gemakkelijk weer opvragen op deze manier:
Session["array_vragen"][1]["antwoord"]

Om de gebruiker zijn ingevoerde antwoord van vraag 1 te laten zien. Door in plaats van antwoord het woord vraag_id neer te zetten zie ik het id nummer dat correspondeert met het vraag_id uit de database.

Meer functionaliteit zoals sorteren enzovoorts heb ik niet nodig. Hoe krijg ik dit voor elkaar?

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:53
B2 schreef op 02 juni 2004 @ 13:27:
[...]


Wat betekenen die 2 waarden nou?
Euh, kijk eens in de help misschien?
Ik moet gewoon een simpele multidimensionale array opslaan in een sessie zoals dat in PHP zo makkelijk kan. Dat moet toch heel simpel kunnen? Iets in de zin van:
Maak dan gewoon een 2 dim array en stop die dan in je sessie.
Om de gebruiker zijn ingevoerde antwoord van vraag 1 te laten zien. Door in plaats van antwoord het woord vraag_id neer te zetten zie ik het id nummer dat correspondeert met het vraag_id uit de database.

Meer functionaliteit zoals sorteren enzovoorts heb ik niet nodig. Hoe krijg ik dit voor elkaar?
En met die namedvalue collection of hashtable kan je de vraag zelf gebruiken om het antwoord te zien te krijgen.

https://fgheysels.github.io/


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Wellicht zo iets duidelijker:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
Session["Questionnaire"] = new StringDictionary ();

// ...

StringDictionary collection = (StringDictionary )Session["Questionnaire"];
collection.Add("Hoe heet je?", "Pietje!");
collection.Add("Hoe oud ben je?", "21");
collection.Add("Hoe lang ben je?", "1.88m");
foreach(DictionaryEntry entry in collection)
{
    Response.Write("<p>" + entry.Key + " = " + entry.Value + "</p>");
}
Response.Write(collection["Hoe heet je?"]);

Professionele website nodig?


  • B2
  • Registratie: April 2000
  • Laatst online: 15:13

B2

wa' seggie?

Topicstarter
whoami schreef op 02 juni 2004 @ 13:30:
[...]
Euh, kijk eens in de help misschien?


[...]


Maak dan gewoon een 2 dim array en stop die dan in je sessie.


[...]

En met die namedvalue collection of hashtable kan je de vraag zelf gebruiken om het antwoord te zien te krijgen.
Inmiddels is het opgelost met een hashtable. Het bericht waar je op reageerde was getypt door een projectlid, dus vandaar de iets afwijkende houding in het bericht :)
Ik zal morgen de code even posten die we nu gebruikt hebben.
Pagina: 1