Как объединить две строки и использовать результат в качестве имени переменной в coldfusion?

У меня есть форма, которая имеет много полей в формате

  • Имя ="Поле-1"
  • Имя ="Поле-2"
  • Имя ="Поле-3"
  • Имя ="Поле-4"
  • так далее....

На странице действий формы я хотел бы иметь возможность использовать цикл и иметь возможность использовать индекс цикла для согласования со строковым префиксом, подобным этому <cfset newField = "field-" & #index#> а затем использовать #Variables.newField# чтобы получить доступ к полю формы на предыдущей странице.

Я играл с Evaluate() функционировать, но не повезло. Я не очень часто использую ColdFusion, так что, возможно, я немного разбираюсь в синтаксисе.

Пример того, как я использую это:

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

2 ответа

Решение

Вы не должны использовать оценку вообще для этого случая. Просто получите доступ к структуре переменных по имени ключа.

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

или просто

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

или если вы не хотите использовать промежуточную переменную

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

Там нет необходимости устанавливать его на variables объем. В вашем цикле вы можете просто получить доступ к значениям поля формы, используя обозначение ассоциативного массива непосредственно из form сфера как это:

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

Для дополнительной безопасности было бы целесообразно проверить наличие каждого поля формы, прежде чем пытаться отобразить его:

<cfif structKeyExists(form, 'field-' & index)>
    <!--- display field --->
</cfif>
Другие вопросы по тегам