29. januar 2006 - 13:33Der er
10 kommentarer og 1 løsning
request querystring
Hejsa E
jeg har en tabel med nogle data og nogle overskrifter. DIsse data kan sorteres efter overskrift, så hvis jeg klikker på navn sorteres efter navn og hvis det er pris så sorteres efter den osv...
Jeg har lavet det således, at der kun vises x antal resultater på hver side og at der kan skiftes side med nogle knapper.
Derudover har jeg lavet det så hvis man feks klikker på navn to gange skifter sorteringen mellem ASC og DESC.
if (Session["sort"].ToString() == Request.Querystring["sort"].ToString()) { if (Session["sortOrder"].ToString() == "ASC") Session["sortOrder"] = "DESC"; else { Session["sortOrder"] = "ASC"; } }
problemet er bare at når man klikker på knapperne så husker den hvad der står i requestet så den skifter hver anden gang man klikker på knapperne....
Hvordan får man request til at virke som i de gode gamle asp dage ?
Altså fjerne GET query i link adressen i browseren?
I dag er det jo viewstate, som efter min mening både giver pros og cons....
hvordan linker du siderne sammen? viewstate eller old-fachion links? det er vel fordi der på din knapper kommer til at stå noget ala "link.aspx?sort=Name" og når du klikker på din knapper kommer det med... eller?
i linksene på sorteringen linkes til samme side med ?sort=n osv. Knapperne laver et postback. Jeg skal vel bare have den til at glemme query efter postback!
private void fillData(int currentPage, int caller) { Constants cnt = new Constants(); Functions fcn = new Functions();
string sortTxt = ""; string orderBy = ""; string sort = ""; int dealerID = fcn.GetDealerID(); int numResult = cnt.numResult; int page = currentPage; int totalNumItems = fcn.GetTotalNumItems("P_GetTotalNumVin", dealerID); int totalNumPages = fcn.GetTotalNumPages(totalNumItems, numResult); int startLimit = 0; string ShowNum = "";
if (caller == 0) { if (Request.QueryString["sort"] != null) sort = Request.QueryString["sort"]; else sort = "";
if (Session["sort"] == null) Session["sort"] = "";
if (Session["sortOrder"] == null) Session["sortOrder"] = "";
switch (sort) { case "n": sortTxt = "Sorteret alfabetisk efter navn"; orderBy = "v.navn"; break; case "pd": sortTxt = "Sorteret alfabetisk efter producent"; orderBy = "p.prodname"; break; case "p": sortTxt = "Sorteret efter pris"; orderBy = "pris"; break; case "l": sortTxt = "Sorteret efter lagerstatus"; orderBy = "lagerstatus"; break; case "r": sortTxt = "Sorteret efter datoen der sidst er rettet"; orderBy = "v.rettet"; break; case "ra": sortTxt = "Sorteret alfabetisk efter den der sidst har rettet"; orderBy = "v.rettetaf"; break; default: sortTxt = "Sorteret efter datoen der sidst er rettet"; orderBy = "v.rettet"; break; }
Altså det korte og det lange er, at Session["sortOrder"] skifter værdi selvom det ikke kan lade sig gøre efter hvad jeg kan se... Session["sortOrder"] bliver kun sat en gang i hele koden og det er i den sidste linie af nedenstående kode. Alligevel er if (Session["sortOrder"].ToString() == "ASC") true og jeg kan se at der udskrives ->DESC på siden, hvilket vel kun kan betyde at sortorder bliver sat til ASC inden den skrives til Session["sortOrder"], eller at Session["sortOrder"] bliver tryller om :) ....... if (Session["sort"].ToString() == sort && page == 1) { if (Session["sortOrder"].ToString() == "ASC") { this.Label1.Text = "->DESC"; sortOrder = "DESC"; } else { this.Label1.Text = "->ASC"; sortOrder = "ASC"; } } else sortOrder = "DESC"; } else { orderBy = "v.rettet"; sortTxt = "Sorteret efter datoen der sidst er rettet"; sort = "r"; sortOrder = "DESC"; }
Jo, men det virker fint, man kan bare ikke denne lille ting, og det betyder ikke det store. takker for hjælpen :) Vi snakkes ved...
Synes godt om
Ny brugerNybegynder
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.