Avatar billede -thomas- Nybegynder
03. februar 2004 - 11:07 Der er 14 kommentarer og
1 løsning

Formularer - tilbage/næste

Jeg skal til at lave en formular med en masse felter og den skal derfor deles op i flere sider med tilbage/næste knapper. Men hvordan sender jeg nemmest dataene med uanset hvilken vej brugeren går? Helst uden brug af javascript...
Avatar billede nute Nybegynder
03. februar 2004 - 11:43 #1
det lyder til at du skal lægge dine formvariabler op i din session når du bladrer fra side til side.

/nute
Avatar billede nute Nybegynder
03. februar 2004 - 11:48 #2
Side1.asp
---------
<%
' denne skal ind på alle dine sider
for( item in Request.QueryString )
    Session( item ) = Request( item )
next
Dim strNavn : strNavn = Session("strNavn")
%>
<html>
<body>
<form action="side2.asp">
<input type="text" name="strNavn">
<input type="submit" value="neste">
</form>
</body>
</html>

side2.asp
---------
<%
' denne skal ind på alle dine sider
for( item in Request.QueryString )
    Session( item ) = Request( item )
next
%>
<html>
<body>
<form action="side3.asp">
<input type="text" name="strAdresse">
<input type="submit" value="neste">
</form>
</body>
</html>


/nute
Avatar billede -thomas- Nybegynder
03. februar 2004 - 12:00 #3
Hvad så hvis jeg krydser en checkbox i min form og værdien bliver lagt i session-variablen. Så går jeg tilbage og fjerner krydset, og så bliver værdien ikke fjernet fra session-variablen igen (da den så ikke bliver hentet ind i løkken). Så vil det jo ikke virke?
Avatar billede nute Nybegynder
03. februar 2004 - 12:27 #4
nej ... hvis du "bladrer" ved hjælp af "frem" og "tilbage" knapperne, så vil det umiddelbart ikke virke, men du kan komme udenom dette ved at gøre 2 ting:

lægge til et META tag:

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">

og subitte formularet på onunload:

<body onunload="document.forms['formnavn'].submit()">

Men ... det er ikke sådan ligetil at lave dette her. for at lave et stabilt system skal du gøre mange små ting for at det hele skal spille sammen.

Alternativt bør du kigge lidt på ASP.NET ... de har indebygget funktionalitet der kan huske skærmbilleder ved "bladring".
Avatar billede -thomas- Nybegynder
03. februar 2004 - 12:31 #5
Ja, det ville sikkert være nemmere i .NET, men har desværre ikke den mulighed - det skal være i ASP 3.0 :(

Jeg kan selvfølgelig skrive navnet på alle felter som skal lægges i session-variablen/hidden field istedet for at hente det ind i en løkke, men det tager jo en evighed med rigtig store formularer...
Avatar billede nute Nybegynder
03. februar 2004 - 12:38 #6
hmm... jeg ville have smidt i min session via en løkke ... det skal det ikke være nogen problemer med der ikke kan opstå ved "manuel" håndtering

/nute
Avatar billede -thomas- Nybegynder
03. februar 2004 - 12:41 #7
Den skal jeg lige have igen... Mener du at jeg skal gøre sådan:

For Each element In Request.Form
  Session(element) = Request.Form(element)
Next

Hvad så med checkboxene? Så kan man ikke fjerne et hak i en checkbox igen?
Avatar billede nute Nybegynder
03. februar 2004 - 12:49 #8
hvis du har checkboxer der hedder 'chk1' og du har valgt 3 af disse, så vil

Session("chk1")

indeholde fx:

1,4,5

dette kan du så håndtere når du skriver ud dine checkboxer:

<%
Dim arrCheckbox : arrCheckbox = SPLIT( Session("chk1"), "," )
function checkForCheckbox( value )
    strReturn = ""
    for i = 0 to UBound( arrCheckbox )
        if( value = arrCheckbox(i) ) then
            strReturn = "checked=""checked"""
        end if
    next
    checkForCheckbox = strReturn
end function
%>
<input type="checkbox" id="chk1" value="1"<%= checkForCheckbox( 1 ) %>> check 1
<input type="checkbox" id="chk1" value="2"<%= checkForCheckbox( 2 ) %>> check 2
<input type="checkbox" id="chk1" value="3"<%= checkForCheckbox( 3 ) %>> check 3
<input type="checkbox" id="chk1" value="4"<%= checkForCheckbox( 4 ) %>> check 4

eller noget ála dette

/nute
Avatar billede -thomas- Nybegynder
03. februar 2004 - 12:52 #9
Tja... kan godt se det bliver meget besværligt lige meget hvordan jeg gør det. Tak for hjælpen, lægger du et svar?
Avatar billede nute Nybegynder
03. februar 2004 - 12:58 #10
ja, det er ikke helt så nemt at lave for at det skal blive godt :-|

svar ...
Avatar billede torstenhagemann Nybegynder
03. februar 2004 - 13:23 #11
Når du skriver 'helst uden brug af javascript', hvor firkantet er det så ment? Der findes små xhtml/javascript løsninger som kan håndtere dette, så du kun har een form som submittes, men de forskellige del ligger i div som vises/skjules efter behov. Og så en submit-knap på sidste side ...

/Torsten
Avatar billede -thomas- Nybegynder
03. februar 2004 - 13:33 #12
Jeg synes det er uhensigtmæssigt, at kun brugere med javascript enabled kan udfylde formularen, så jeg prøver så vidt muligt at holde javascript væk fra "vigtige" funktioner.

Nu er jeg gået i gang med den besværlige løsning, hvor jeg henter alle felter et efter et ind i session-variabler... Kedeligt og besværligt, men det virker.
Avatar billede torstenhagemann Nybegynder
03. februar 2004 - 13:37 #13
Fint - held og lykke.

/Torsten
Avatar billede -thomas- Nybegynder
03. februar 2004 - 13:43 #14
Men ellers tak for forslaget - kan være jeg skal lave det i ASP.NET næste gang, så jeg slipper for de problemer...
Avatar billede torstenhagemann Nybegynder
03. februar 2004 - 14:01 #15
Har en svag erindring om at MS lavede noget asp som virker som en form for forløber for asp.net, bl.a. skulle der være en datagrid komponent. Filerne hedder datagrid.htm og datagrid.asp, og ligger standard i "_ScriptLibrary". Jeg har dem liggende, men har ingen dokumentation, hvis du skulle have mod på at prøve 8-).

/Torsten
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
Kurser inden for grundlæggende programmering

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