24. februar 2004 - 10:48Der er
12 kommentarer og 1 løsning
History back, ASP.NET & C#
Jeg sidder og laver en web applikation, hvor jeg har brug for en back knap, da mine brugere ikke vil nøjes med den som IE har indbygget. Jeg leder IKKE efter en løsning med Java, jeg leder efter en knap, eller noget som arbejder i ren C#.
Grundlaeggende saa beskriver artiklen, hvordan du via en session-variabel som ved page_load husker referrer-siden og en link-button, kan dirigere brugeren tilbage til den refererende.
Det kan jeg ikke lige huske på stående fod, lang tid siden jeg prøve mig frem. Men til sidst kunne jeg slet ikke overskue det hele, da jeg ikke lige er den store haj til C# endnu...
Jeg har kigget efter andre maader at goere det paa, men uden held. Jeg har desvaerre ikke tid til at komme med et konkret eksempel nu, men maaske i aften.
Hvorfor er det for resten, at du ikke vil goere det med javascript i selve browseren uden et callback til serveren?
Jeg har engang lavet noget med Stack gemt som en Session-variable, som indeholdt siderne brugeren skulle redirectes tilbage til: Når brugeren klikkede på en knap, som ville føre til en ny side, blev der lagt et nyt item i stack'en, og når brugeren så klikkede "tilbage"-knappen på en side, blev stack'en tjekket først, og hvis den indeholdt noget, blev der redirected til den pågældende side...
jakob> Det lyder spændende det der du snakker om... Fungerede det som en slags array af en art? Eller hvordan skal jeg se på den omtalte Stack?
dgivoni> Det er en slags princip sag på min arbejds plads, at man helst holder sig til C# hele vejen igennem, når man udvikler i VS.NET. Andre grunde er der faktisk ikke rigtig... :) Men som sagt, det er ikke helt mig som afgør tingene, men hvis det virkelig ikke kan lade sig gøre, må du lære mig hvordan jeg får det Javascript til at virke. Det har jeg nemlig heller ikke så meget styr på for at sige det mildt. :)
Det kan selvfølgelig også nemt implementeres som en decideret control, men princippet er det samme.
Der benyttes dog stadig javascript til selve formålet .. men det gør det muligt at udføre det ved postbacks og man kan også pakke javascript koden lidt bedre væk hvis det er det man har lyst til :)
Faktisk burde du meget nemt kunne omskrive følgende eksempel til C#.
Måske har du lyst til at se nærmere på en "Stack" i MSDN, det er en af de nye collections i .NET. Først og fremmest opretter jeg altid Session variable i Global.asax.vb:
... Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs) Dim stkReturnTo As New Stack Session("stkReturnTo") = stkReturnTo End Sub ...
Så siger vi, at jeg har to sider, Page1.aspx og Page2.aspx. Når man klikker en bestemt knap (btnDisplay) fra Page1, bliver brugeren redirected til Page2. Når brugeren vil tilbage, skal brugeren klikke på btnBack, som så tjekker i Session-variablen, hvor brugeren egentlig kom fra. Det ser nogenlunde sådan ud:
' Page1.aspx, som har btnDisplay-knappen ... Private Sub btnDisplay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisplay.Click Call CType(Session("stkReturnTo"), Stack).Push("Page1.aspx") ' Det er denne side, som brugeren skal vende tilbage til! Call Response.Redirect("Page2.aspx")
End Sub ...
' Page2.aspx, som har btnBack-knappen ... Private Sub btnBack_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBack.Click
If CType(Session("stkReturnTo"), Stack).Count > 0 Then Response.Redirect(CType(Session("stkReturnTo"), Stack).Pop) Else ' Crap, ingenting at vende tilbage til!?!?! End If End Sub ...
Det er såre simpelt, men der er bestemt plads til forbedringer i ovenstående kodeeksempel: Hvis du ikke har 100% styr på hvordan brugerne navigerer mellem siderne, kan der opstår problemer når der pludselig er en "gammel" side gemt i stkReturn-stack'en.
Har lige fået kigget gamle indlæg igennem, sorry for den ULTRA langsomme point givning.... :)
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.