2013-04-02 25 views
5

Mam formularz, który ma wiele pól w formacieJak połączyć dwa łańcuchy i użyć wyniku jako nazwy zmiennej w trybie coldfusion?

  • name = "field-1"
  • name = "field-2"
  • name = "field-3"
  • name = „field-4”
  • itp ....

na stronie forma działania, chciałbym, aby móc korzystać z pętli i móc korzystać z indeksu pętli do concat z ciąg znaków przedrostek taki jak ten <cfset newField = "field-" & #index#>, a następnie użyj #Variables.newField#, aby uzyskać dostęp do pola formularza na poprzedniej stronie.

Grałem z funkcją Evaluate(), ale bez powodzenia. Nie używam ColdFusion bardzo, więc mogę po prostu być trochę na składni.

Przykładem jak używam go jest:

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

Po prostu wyświetla form.field-1, form.field-2 i tak dalej. Potrzebuję wartości przechowywanej w form.field-1, a nie w tekście "form.field-1". –

Odpowiedz

8

Nie trzeba używać oceniać w ogóle w tym przypadku. Wystarczy uzyskać dostęp do zmiennych struct według nazwy klucza.

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

lub po prostu

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

lub jeśli nie chcesz korzystać z okresową zmiennej

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

Bingo, musiałem zmienić to na ''. Dziękuję bardzo i muszę poczekać kolejne 5 minut, zanim będę mógł dać ci kredyt, ale zrobię to. :-). –

+0

Awesome. Oczywiście działa z dowolnym obiektem struct - używałam tylko struktur, o których wspomniałeś/użyłeś w pytaniu. –

4

Nie ma potrzeby, aby ustawić go na zakres variables. W obrębie pętli, można po prostu przejść do wartości pól formularza za pomocą notacji tablicy asocjacyjnej bezpośrednio z zakresu form jak ten:

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

Dla dodatkowego bezpieczeństwa, to byłoby mądre, aby sprawdzić istnienie każdego pola formularza przed próbą aby go wyświetlić:

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