Toon posts:

[VB.NET] Objecten meegeven aan een Redirect

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een Response.Redirect onder een knop op mijn pagina1 staan, die ervoor zorgt dat ik naar pagina2 ga. Nu wil ik een gevulde Arraylist uit pagina1 meegeven aan pagina2 dmv die redirect. Alleen wil hij alleen maar Strings accepteren die meegegeven worden. Dit werkt dus bv wel:

code:
1
2
3
4
5
Private Sub ButtonSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonSave.Click
        Dim params As String
        params = "SelElements=" & Server.UrlEncode(PageLabel.Text)
        Response.Redirect("Editor.aspx?" & params)
    End Sub


en dan op pagina2 in de page load:

code:
1
Label1.Text = (Request.QueryString("SelElements"))


Dit haalt de tekst op een label op pagina1 op en zet die op een ander label op pagina2 (Editor.aspx). Werkt gewoon. Maar hoe gaat het als ik niet een String wil meegeven, maar een ander object (zoals bv een ArrayList)?

Verwijderd

Gebruik session object.

Verwijderd

Topicstarter
Op welke manier? Ik snap niet goed wat ik met dat antwoord moet :|

  • gorgi_19
  • Registratie: Mei 2002
  • Nu online

gorgi_19

Kruimeltjes zijn weer op :9

code:
1
Session("blaat") = objectnaam

En deze later weer mbh CType terugzetten naar het juiste objecttype

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Verwijderd schreef op 10 December 2002 @ 12:07:
Op welke manier? Ik snap niet goed wat ik met dat antwoord moet :|
Al gekeken in de documentatie mbt HttpContext.Session ? Lijkt me een goed startpunt om eens te kijken hoe je dit object in je asp.net applicatie kunt gebruiken. Kijk verder naar de quickstart tutorials op gotdotnet.com, want je toont IMHO aan dat je (nog) te weinig kennis hebt om solide software te bouwen mbt asp.net en daar krijg je alleen maar last van. Neem die docs en die tutorials door en je hebt het in no-time op de rit.

Verwijderd

Ik zou 't sessie-object hier niet eens voor misbruiken...

TS: Waarom maak je gebruik van een Redirect en niet 'gewoon' van een Server.Transfer of nog beter: waarom post je niet naar pagina2?

  • whoami
  • Registratie: December 2000
  • Laatst online: 09:56
Waarom misbruiken?

Ik denk niet dat een Server.Transfer hier de aangewezen oplossing is;
Terminates execution of the current page and begins execution of a new page.

https://fgheysels.github.io/


Verwijderd

Dan moet je volgens mij wel de EnableViewStateMac op false zetten

Verwijderd

Verwijderd schreef op 10 december 2002 @ 13:18:
Ik zou 't sessie-object hier niet eens voor misbruiken...
En waarom niet? Daar _IS_ de session voor: voor het bewaren van tempdata tijdens roundtrips _TUSSEN_ pages. Voor roundtrips op dezelfde page is de viewstate geintroduceerd.
TS: Waarom maak je gebruik van een Redirect en niet 'gewoon' van een Server.Transfer of nog beter: waarom post je niet naar pagina2?
Ja posten naar page 2! Dit is geen ASP, dit is asp.net: waar de code van de page achter de page zit in een codebehind class. OF je gaat lekker asp-en, OF je gaat ASP.NET gebruiken. Op zn ASP's met ASP.NET bezig zijn lijkt me jezelf immens tegenwerken, maar goed, ieder zn kicks :)

Verwijderd

Met het gevaar off-topic te raken, wil ik kort in gaan op de situaties wanneer je imho de sessie kunt gebruiken en wanneer je het beter niet kunt gebruiken.

Sessie
Het Session-object gebruik je voor applicatie ("globale") "variabelen", die tijdens het gebruik van de applicatie niet kunnen wijzigen, zoals bijvoorbeeld een userid van de ingelogde gebruiker.

Geen sessie
Stel je hebt 3 pagina's met informatie over een bepaalde Order. Dan is het niet handig om het orderid in de sessie te gaan bijhouden. Omdat:
- De gebruiker gaat naar de eerste pagina en vraagt de gegevens op van een Order met orderid=1.
- De gebruiker gaat naar de tweede pagina. (A)
- De gebruiker opent een nieuwe ("browser") pagina met ctrl-n en gaat hier weer terug naar de eerste pagina, maar vraagt daar de gegevens op van een Order met orderid=2.
- Als de gebruiker nu met alt-tab teruggaat naar de tweede pagina (A), ziet hij hier nog de gegevens van de Order met orderid=1, maar is de orderid in de sessie verandert in 2. Dit kan dus problemen geven als er nu hier wijzigingen gedaan worden.

Verwijderd

puckly: je voorbeeld: correct, maar toch zijn er zaken die je ook in het sessie kunt bewaren, imho alle met userstate gerelateerde zaken. In jouw voorbeeld zou het dus niet mogelijk moeten zijn dat de user nog een order op kan vragen in een ander window. Wil je dat wel toestaan, dan moet je idd de huidige order niet als userstate opslaan in de sessie maar meenemen in de querystring.

Als je puur stateless programmeert heb je niet zoveel data te storen in een sessionobject maar je zou kunnen denken aan bv searchresults waarin je browst (dat kan efficienter zijn dan ze elke keer weer opvragen) etc. Ik heb geen idee waar de TS precies zn arraylist voor wil gebruiken, maar wellicht heeft ie een wizard gemaakt waarin je een aantal stappen doorloopt, en per stap heb je een page (je kunt dit beter met panels oplossen maar ok :P), dan moet je de data onthouden in de session, daar ontkom je niet aan. Opent de user dan een nieuw window, tja... ik redeneer dan op een gegeven moment zo: als de gebruiker moedwillig de applicatie loopt te verzieken en hij krijgt dan crappy functionaliteit dan is dat zn eigen schuld.

Verwijderd

Topicstarter
Mijn bedoeling is in feite om op de ene pagina uit een gevulde listbox elementen te selecteren die dan verschijnen in een tweede listbox. Daarna ga ik op een knop klikken waardoor ik naar pagina 2 ga, waar ook een listbox aanwezig is. In de listbox op die tweede pagina wil ik nu alle items hebben staan die op pagina 1 waren geselecteerd.
Dat dat niet in de redirect moet is me wel duidelijk, maar hoe dan wel kan ik effe niet goed achterkomen... Die tutorials hebben het over session, viewstates, userstates, global application variabelen... Ik kom er iig niet goed uit vandaar dat ik het hier even vraag.

  • whoami
  • Registratie: December 2000
  • Laatst online: 09:56
Je kan dus, zoals reeds gezegd, jouw ArrayList in een Session object steken, en dat object dan op de volgende pagina uitlezen:
code:
1
2
3
4
5
6
7
Session["SelectedItems"] = myArrayList;

// op de andere page:
if( Session["SelectedItems"] != null )
{
   EenArrayList = (ArrayList)Session["SelectedItems"];
}

C# maar makkelijk te herschrijven naar VB.NET

https://fgheysels.github.io/

Pagina: 1