为什么括号访问符号有效但有点无效?

时间:2014-01-23 10:10:55

标签: sql-server coldfusion struct notation

我在ColdFusion中有一个搜索表单。在post上,它调用SQL存储过程。默认情况下,它返回前20个匹配记录,并接受“pagenum”参数(除了许多其他输入参数),允许您指示您想要查看的20个组(用于分页)。出于某种原因,此代码实现了预期的结果:

<cfset form["pagenum"] = 3 />

虽然这似乎没有任何影响:

<cfset form.pagenum = 3 />

我的印象是这两行代码完全相同,并且你想要使用括号表示法的唯一原因是你在变量中有不寻常的字符,这在点符号中是不允许的。那么为什么我会为这两行代码得到不同的结果呢?

(如果它有所不同,存储过程接受xml格式的所有参数然后解析它们。我们有一个coldfusion函数,我们调用它来转换参数struct - 在这种情况下,form - 到xml并将其传递给函数。)

更新

我刚才注意到,当我使用form.pagenum时,struct中的键是大写的(PAGENUM),而如果我使用form [“pagenum],则它是小写的(pagenum)。似乎如果你在一个结构中添加一个值,那么键默认为大写。而且由于XML区分大小写,这可能就是抛弃存储过程......

2 个答案:

答案 0 :(得分:3)

<cfset form.pagenum = 3 />

将键默认为大写(PAGENUM),导致xml中出现区分大小写且期望pagenum的问题。

<cfset form["pagenum"] = 3 />

指定密钥的大小写并避免此问题。

答案 1 :(得分:2)

您使用的是什么版本的Coldfusion?我用CF10和最新的铁路测试了这个:

<CFDUMP var="#FORM#">
<cfset form["pagenum"] = 1 />
<CFDUMP var="#FORM#">
<cfset form.pagenum = 2 />
<CFDUMP var="#FORM#">

Output of three dumps