MultiSelect

Il campo form <select>, conosciuto anche come combo box , può avere un attributo chiamato multiple che permette di accettare la selezione di più valori.

Prendendo come esempio la figura 1 notiamo che la select ammette la selezione di più colori, eseguibile tramite la combinazione di tasti CTRL + SELEZIONE del COLORE.

In ASP è possibile richiamare un valore di un campo form tramite il comando Request.Form("nomecampo") che restituirà una stringa corrispondente al valore del campo. Per le select multiple il metodo è lo stesso, con la differenza che il valore passato ad ASP non sarà un singolo valore ma una stringa composta da tutti i valori separati da una virgola.

Nel caso in figura 1 un richiamo:

Request.Form("color")

Restituirà quindi una stringa del tipo:

giallo, rosso

che il browser saprà associare automaticamente ad una collezione di dati per la select in questione.

Vediamo quindi come richiamare e trattare questi dati.

Immaginando di voler eseguire una azione sui valori ricevuti dalla form (ad esempio cancellare da un database record che contengono quei colori, inserire in un database un record per ciascun colore, creare un elendo di cartelle per ogni colore scelto); potrebbe risultare scomoda una stringa contenente tutti i dati concatenati.
Più utile è trattare ciascun valore singolarmente eseguendo le operazioni volute:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<%

Dim objColor
if Request.QueryString("print") = 1 then

  ' A dimostrazione stampa la lista degli elementi selezionati
  Response.Write("Stringa valori concatenati : ")
  
  ' con il comando classico Request.Form()
  Response.Write(Request.Form("color"))
  
  ' Esegui un ciclo per ogni elemento selezionato
  ' trattandolo singolarmente
  for each objColor in Request.Form("color")

    Response.Write("<p style=""color:" & objColor & ";"">")
    Response.Write("Questa frase è scritta in valore " & objColor & "</p>")

  next

end if
%>

<form action="default.asp?print=1" method="post">
<p>Scegli il colore:</p>

<select name="color" size="5" multiple>
  <option value="white">bianco</option>
  <option value="yellow">giallo</option>
  <option value="green">verde</option>
  <option value="blue">blu</option>
  <option value="red">rosso</option>
  <option value="black">nero</option>
</select>

<p><input type="submit" name="submit" value="colora!"></p>

</form>

Nell’esempio sopra costruiamo la select mostrata in figura 1. Questa select contiene un elenco di colori.

Creiamo una semplice form che rimandi i valori selezionati alla pagina default.asp (che è la pagina usata per il test) e all’esecuzione controlliamo con una condizione if se è stata inviata la form. In caso affermativo verrà eseguito il contenuto dentro al blocco if. Per dimostrare la differenza la condizione if eseguirà come prima cosa una chiamata tradizionale con il metodo Request.Form() e stamperà il contenuto. La seconda chiamata è la parte fondamentale dell’esempio. Mediante la sintassi:

for each nomeoggetto in collezioneoggetto

vengono richiamati e valorizzati nella variabile nomeoggetto i singoli valori della select che potranno poi essere usati normalmente. Nel nostro caso ciascun colore è usato per colorare un testo: