Avatar billede the_party_dog Nybegynder
24. februar 2004 - 10:48 Der 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#.

Kan dette lade sig gøre?
Avatar billede dgivoni Nybegynder
24. februar 2004 - 10:54 #1
Ja, men det er ikke helt simpelt.
Jeg har fundet flg. artikel, som beskriver en maade at loese det paa:
http://www.fawcette.com/vsm/2003_07/magazine/columns/qa/

Haaber du kan bruge det.
Avatar billede the_party_dog Nybegynder
24. februar 2004 - 10:57 #2
Den side har jeg prøvet, og har spildt timer på det, og kan slet ikke finde ud af hvordan han vil have det til at hænge sammen..... :(
Avatar billede dgivoni Nybegynder
24. februar 2004 - 10:58 #3
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.
Avatar billede dgivoni Nybegynder
24. februar 2004 - 10:58 #4
naa, det var ikke saa godt. hvad er det som ikke virker/haenger sammen?
Avatar billede the_party_dog Nybegynder
24. februar 2004 - 11:13 #5
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...

Du har ikke andre forslag til mig?
Avatar billede dgivoni Nybegynder
24. februar 2004 - 11:27 #6
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?
Avatar billede jakobg Nybegynder
24. februar 2004 - 12:18 #7
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...
Avatar billede the_party_dog Nybegynder
24. februar 2004 - 12:22 #8
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. :)
Avatar billede dj Nybegynder
24. februar 2004 - 13:33 #9
En nem løsning er f.eks. at gøre således:

<asp:LinkButton onclick="BackButton_Click" id="BackButton" Text="Back" runat="server" />

og så i OnClick eventen gøre således:

protected void BackButton_Click(object sender, System.EventArgs e) {
  Response.Write("<script language=\"javascript\">java script:history.go(-2)</script>");
}

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 :)
Avatar billede jakobg Nybegynder
24. februar 2004 - 13:42 #10
Jeg kan lave et kode-eksempel, men det bliver desværre i VB.NET. Har det nogen interesse?
Avatar billede the_party_dog Nybegynder
24. februar 2004 - 13:45 #11
jakobg> meget gerne, det er altid godt med noget nyt viden :)
Avatar billede jakobg Nybegynder
24. februar 2004 - 14:05 #12
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.
Avatar billede the_party_dog Nybegynder
26. maj 2004 - 06:00 #13
Har lige fået kigget gamle indlæg igennem, sorry for den ULTRA langsomme point givning.... :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester