2013-04-02 37 views
5

Ho una forma che ha molti campi nel formato diCome concatenare due stringhe e usare il risultato come nome di variabile in coldfusion?

  • name = "field-1"
  • name = "field-2"
  • name = "field-3"
  • name = "field-4"
  • ecc ....

Nella pagina form action, mi piacerebbe essere in grado di utilizzare un ciclo ed essere in grado di utilizzare l'indice del ciclo di concat con una stringa prefisso come questo <cfset newField = "field-" & #index#> e quindi utilizzare #Variables.newField# per accedere al campo modulo nella pagina precedente.

Ho giocato con la funzione Evaluate(), ma senza fortuna. Non uso molto ColdFusion, quindi potrei essere un po 'fuori sintassi.

Un esempio di come lo sto usando è:

<cfset newField = "form.field-" & #index#> 
<input type="hidden" 
     name="field-<cfoutput>#index#</cfoutput>" 
     value="<cfoutput>Evaluate(Variables.newField)</cfoutput>"> 
+0

Invia solo form.field-1, form.field-2 e così via. Ho bisogno del valore memorizzato in form.field-1, non del testo "form.field-1". –

risposta

8

Non è necessario utilizzare la valutazione a tutti per questo caso. Basta accedere alla struttura delle variabili per nome chiave.

<cfset newField = "form.field-" & index> 
<cfset value = variables[newField]> 

o semplicemente

<cfset value = variables["form.field-#index#"]> 

o se non si desidera utilizzare una variabile intermediario

<cfoutput>#variables["form.field-" & index]#</cfoutput> 
+0

Bingo, ho appena dovuto cambiarlo in ''. Grazie mille, e devo aspettare altri 5 minuti prima di poterti dare credito, ma lo farò. :-). –

+0

Fantastico. Ovviamente, funziona con qualsiasi oggetto struct - stavo solo usando le strutture che hai citato/usato nella domanda. –

4

Non c'è alcuna necessità di impostare la portata variables. All'interno del vostro ciclo, si può semplicemente accedere ai valori dei campi modulo utilizzando la notazione array associativo direttamente dal form campo di applicazione in questo modo:

<input type="hidden" name="field-<cfoutput>#index#</cfoutput>" 
value="<cfoutput>#form['field-' & index]#</cfoutput>"> 

Per una maggiore sicurezza, sarebbe saggio per verificare l'esistenza di ogni campo del modulo prima di provare per visualizzarlo:

<cfif structKeyExists(form, 'field-' & index)> 
    <!--- display field ---> 
</cfif>