Hej! <code> Dumt att skicka det till en sida för att sedan göra en riderect tillbaks. Jag skulle göra något sånt här: Okej..snygg lösning men varför skulle det vara dumt att skicka till en annan sida och sedan en redirect? Jag gjorde som du skrev Putte, det såg enklare ut och fungerade utmärkt!! Några av anledningarna: Min egentligen enda anledning i detta fall är att jag är måttligt bra på ASP och har jag det på en sida, får jag så svårt att hålla reda på all kod..... Jag håller inte riktigt med dig här: >* Sparar resurser. Istället för att öppna en connection på båda sidorna. Ok..jag ser och förstår din synpunkter. Jepp. Ger mig inte om jag tror jag har rätt. Då gäller det bara att överbevisa mig så ger jag mig. Trots att jag inte Jobbat med IIS och ASP så mycket. Har jag snappat upp en hel del om det. Använder oxå mina VB kunskaper. Du hann före min redigering. Var lite för snabb att ge mig. ;) Jag utgår från att innehållet i listrutorna hämtas från en tabell. Så är det effektivaste sättet. Vad menar du är bristerna eller onödigt i hanteringen? Jepp. Så är det. Desutom återanvänderjag recordset instanse. Öpnar den med en anna radkälla bara. ok..jag ger mig...du tjänar in en connection på din lösning istället för att skicka det till en annan sida och sedan redirect..Ta emot värden ifrån en listbox?
Så här är det:
Jag har två listboxar(<select size="5">), alltså där alla rader syns och man kan markera en eller flera.
I den vänstra ligger alla användare som finns i vår databas(ett recordset). I den högra ligger de som är medlemmar i det aktuella projektet(ett annat recordset). Mitt emellan dess knappar ligger två pilar, där man ska lägga till/ta bort medlemmar.
När man ska lägga till en medlem och klickar på pilen, så postas formuläret till en ny sida som lägger in/tar bort medlemmen i databasen, sedan gör jag response.redirect tillbaks.
Varje <option> heter opt<%=rs("namn")..och har ett id som heter <%=rs(namnID")
Så är tanken i alla fall...
Min fråga är:
Hur tar jag emot på sida 2, de namnen som man markerat i listboxen? Det kan var en eller flera.
Hjälp, please!!!!Sv: Ta emot värden ifrån en listbox?
När du postar en grupp checkboxar och listboxar så skickas värden komma separerade.
Ex: 3,4,6,7
Om du hade gjort en response.write på listboxen så hade du sett det.
Ta för vana att göra en response.write så ser du vad du har att jobba med.
Det du får göra är att splitta strängen och göra en array(vektor) av den.
Dim users
Dim myArr
users = Request.Form("users") 'namnet på listboxen
'Syntax split()
Split(expression[, delimiter[, count[, compare]]])
'splitta på komma(,)
myArr = split(users,",")
'antal markerarde bara för skojs skull
intAntUsers = Ubound(myArr)
'loopa igenom array
for each i in myArr
response.write myArr(i) & "<br>"
'här får du göra det du vill med de valda användarna
'sSQL = "UPDATE tbl_users Set someField = '" & somevalue & "' WHERE
'userID = " & i & ""
'eller något annat.
next
</code>
//PutteSv: Ta emot värden ifrån en listbox?
<code>
<form method=POST>
<%
Dim conn
Dim rsTemp
Dim fldId
Dim fldName
ProjektID = ???
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "<<<Connection String>>>"
Select Case Request.Form("Action")
Case "Add"
If Len(Request.Form("AddList")) > 0 Then
con.Execute "INSERT INTO ProjektAnställda (Projekt, Anställd)" & vbCrLf & _
"SELECT " & ProjektID & ", namnID" & vbCrLf & _
"FROM Anstälda" & vbCrLf & _
"WHERE namnID IN (" & Request.Form("AddList") & ")"
End If
Case "Remove"
If Len(Request.Form("RemoveList")) > 0 Then
con.Execute "DELETE FROM ProjektAnställda" & vbCrLf & _
"WHERE Projekt = " & ProjektID & " AND Anställd IN (" & Request.Form("AddList") & ")"
End If
End Select
Set rsTemp = conn.Execute("SELECT * FROM Anställda")
Set fldId = rsTemp("NamnID")
Set fldName = rs("namn")
Response.Write "<select multiple size="5" name="AddList">"
Do Until rsTemp.Eof
Response.Write "<option value=" & fldID & ">" & fldName & "</option>"
rsTemp.MoveNext
Loop
Response.Write "</select>
rsTemp.Close
Response.Write "INPUT type=submit name=""Action"" value=""Add"">
Response.Write "INPUT type=submit name=""Action"" value=""Remove"">
rsTemp.Open "SELECT Anställda.NamnID, Anställda.namn FROM ProjektAnställda LEFT JOIN Anställda ON ProjektAnställda.Anställd = Anställda.NamnID WHERE ProjektAnställda.Projekt = " & ProjektID, conn
Set fldId = rsTemp("NamnID")
Set fldName = rs("namn")
Response.Write "<select multiple size="5" name="RemoveList">"
Do Until rsTemp.Eof
Response.Write "<option value=" & fldID & ">" & fldName & "</option>"
rsTemp.MoveNext
Loop
Response.Write "</select>
rsTemp.Close
conn.Close
%>
</form>
</code>Sv: Ta emot värden ifrån en listbox?
Jag ser inte några vinster på det förutom att du slipper skapa en sida till.
Jag menar du måste ju ändå posta formuläret vare sig det går till samma sida eller inte.
Eller är jag ute och cyklar här. Hjälp mig här...
//PutteSv: Ta emot värden ifrån en listbox?
Tack för hjälpen!
Ibland tycker jag det är enklare att ha det på två sidor, kan bli så mycket kod annars. I detta fallet har jag en del andra funktioner på sidan, t ex en sökfunktion och den postas till samma sida. Därför tyckte jag det var enklare att skicka till en ny.
Hälsningar JockeSv: Ta emot värden ifrån en listbox?
* Slipper administrera ytterligare en asp sida
* Sparar resurser. Istället för att öppna en connection på båda sidorna. KAn du använda en och samma.
* Servern behöver arbeta mindre. Istället för att behöva hantera anrop till två sidor. Behövs bara en sida hanteras.
* Klienten behöver bara göra ett anrop.
Att i detta fall använda ReDirect är ju som attt gå över ån efter vatten som jag ser det. Finns inte någon fördel med ReDirect i detta fallet.Sv: Ta emot värden ifrån en listbox?
Men, tack ändå!!!!
/JockeSv: Ta emot värden ifrån en listbox?
* Slipper administrera ytterligare en asp sida
Denna stämmer. Fördelen med 2 är att jag tycker att flödet och koden blir mer lättförtsåeligt.
* Sparar resurser. Istället för att öppna en connection på båda sidorna. KAn du använda en och samma.
Själva kopplingen mot databasen tar ju inte som hemskt mycket kraft. Det är ju när du kallar på databasen som belastningen är som störst.
Du stänger ju kopplingen efter att sidan laddats klart eller hur. Även om du postar till samma sida igen eller en ny så måste ju en ny connection öppnas.
* Servern behöver arbeta mindre. Istället för att behöva hantera anrop till två sidor. Behövs bara en sida hanteras.
Det spelar ingen roll vilken sida som anropas. Det är väl antalet gånger som server anropas som spelar roll. Du måste ju posta formuläret för att se vilken action användaren valt, add eller remove
* Klienten behöver bara göra ett anrop.
Stämmer inte. Formuläret måste postas för att något skall händas. Så varje gång du skall göra något så måste servern anropas.
Rätt eller fel?
//PutteSv: Ta emot värden ifrån en listbox?
>KAn du använda en och samma.
>
>Själva kopplingen mot databasen tar ju inte som hemskt mycket kraft. >Det är ju när du kallar på databasen som belastningen är som störst.
Efter som IIS'en är dålig på att släppa referenser så är det bra att undvika att instansiera objekt.
>Du stänger ju kopplingen efter att sidan laddats klart eller hur.
>Även om du postar till samma sida igen eller en ny så måste ju en ny connection öppnas.
Jepp. Men om du postar till sig själv slipper du skapa och äppna anslutningen på "spara" sidan.
>* Servern behöver arbeta mindre. Istället för att behöva hantera anrop till två sidor.
>Behövs bara en sida hanteras.
>
>Det spelar ingen roll vilken sida som anropas.
>Det är väl antalet gånger som server anropas som spelar roll.
>Du måste ju posta formuläret för att se vilken action användaren valt, add eller remove
Redirect'en är ett komando servern skickar till klienten som säger åt den att anropa en annan sida. Med andra ord kommer först informationen postas till Redirectsidan. När anropet är utfört. Kommer servern skicka hoppa till dennna sidan till klienten. Klienten kommer då fråga serven efter sidan som med listboxarna.
>* Klienten behöver bara göra ett anrop.
>
>Stämmer inte. Formuläret måste postas för att något skall händas.
>Så varje gång du skall göra något så måste servern anropas.
Se svaret ovan.
Eftersom det viktiga för större sajter är hur mycket resurser som slukas. Kan jag inte försvara användningen av redirect i detta fallet.
Om man vill administrera spara koden separat. Kan man ju göra en include istället. I och med att IIS5 och senare cachar den kompilerade koden. Så påverkar inte detta prestandan som Includes gjorde i tidigare versioner.
Och du kallar dig expert på IIS och ASP... ;O)Härligt...
Men
Efter som IIS'en är dålig på att släppa referenser så är det bra att undvika att instansiera objekt.
Du måste ju göra det varje gång sidan laddas. Eller?
Om vi använde din kod.
1. Öppnar kopplingen.
2. Första gången så finns inge action. Så formuläret skrivs ut.
3. Kopplingen stängs.
4. Markera användare. Klicka på Submit. Server anropas.
5. Öppar koppling.
6. Kollar Add eller Remove.
7. Insert eller delete. Skriver ut formuläret.
8. Stänger kopplingen.
Varje gång sidan anropas öppnas kopplingen igen.
Eller?
//PutteSv: Härligt...
Fortsättning
Läs ovanför ditt svar.
//PutteSv: Härligt...
Antar att du utgår från statiska listor? Det är den enda anledning jag kan förstå din "logik".
Vad menar du är bristerna eller onödigt i hanteringen?Sv: Härligt...
Jag säger inte att din lösning är fel eller något. Jag bara undrar över detta med antalet connections och varför din lösning skulle belasta servern mindre. Intresserad för att lära mig...inget annat.
Jag räknar också med att informationen som visas i listboxarna kommer från tabeller i db.
Det som jag undrar över är det du säger att det blir mindre conn.opens med din lösning.
Och det är det jag inte håller med dig.
För varje gång du trycker(postar) på Add eller remove så måste sidan laddas om.
Rätt eller fel?
Varje gång som sidan laddas om så skapas en conn objekt.
Rätt eller fel?
Varje gång som sidan laddats klart så stänger du conn objektet med
Conn.Close.
Rätt eller fel?
När sidan laddats klart så "släpper" läsaren kontakten med webserver och vid varje ny postning så anropas server igen.
Rätt eller fel?
//PutteSv: Härligt...
Sv: Härligt...
men det blir lika många databasanrop
//Putte