如果有更好的方法来解决这个问题(这很可能),请让我知道如何去做。
我正在编写一些代码,这些代码应该动态地将表单变量设置为常规变量,这样我们就可以变得懒惰,而不必使用 form.somevariable 名称来引用变量。
那部分工作得很好。直到我开始测试 URL 变量具有相同名称的 URL 冲突。例如。. .
我有一个传递两个变量的表单;名字和姓氏。如果我点击页面,表单就会出现,我输入名字和姓氏,然后单击提交。该代码完美运行。
但是,如果我有同名的 URL 变量,则代码会报告 url 变量值而不是表单值。
一些样本值;
url.FirstName = 乔
url.LastName = 黑色
form.FirstName = 史蒂夫
form.LastName = 白色
我公开表单变量的代码将正确找到表单字段名称,但是当我“评估”给定表单字段的值时,它将返回同名 URL 变量的值,而不是表单变量。
我真正想要的(正如我在上面简要描述的)是让代码自动将客户端、URL 和表单变量转换为“常规变量”,这样您以后就不必编写大量额外的代码来获取它们。CFWHEELS 和 ColdBox 等框架默认执行此操作,但在我工作的公司,我们没有使用其中任何一个。我需要它来公开 URL 变量,但如果它们具有相同的名称,则将它们作为主变量,因为它们可能旨在进行更新等。
代码如下 如果您愿意,请随意忽略 URL 和客户端变量的代码,因为它们不会直接影响表单代码的工作方式,我已经将它们注释掉了,我得到了相同的结果。我提供所有这些是为了更完整地了解我到目前为止一直在玩什么。请注意,我通常不使用“评估”。可能有更好的方法,但我不知道它是什么。
++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++
名字 姓氏网址变量:
<cfloop index="i" list="#paramsurl#">
<cfset myDynVar = Evaluate(i)>
<!--- Let's output the dynamically created variable as a test --->
#i# = #myDynVar#<br />
</cfloop>
<cfoutput>
<b>Field Names:</b> #Form.FieldNames#
<p>
<b>Field Values:</b><br>
<cfloop INDEX="TheField" list="#Form.FieldNames#">
#TheField# = #Evaluate(TheField)#<br>
<cfset TheField = Evaluate(TheField)>
</cfloop>
</p>
Lets try and output the two form fields without using the "form." notation<br>
FirstName : #FirstName# <br />
LastName : #LastName#
</cfoutput>
当前可用的客户端变量有:
<cfset nVarCounter = 1>
<cfloop list="#GetClientVariablesList()#" index="whichClientVar">
#whichClientVar# : #client[whichClientVar]#<br />
<cfset whichClientVar = Evaluate(whichClientVar)>
</cfloop>