7

为什么以下在 CF10 中有效但在 CF9 中无效?

<cfset out="">
<cfif isQuery( arguments.values ) >
    <cfloop query="#arguments.values#" >            
        <cfset out = '#out#<option value="#value#">#label#</option>'>
    </cfloop>
</cfif>

CF9 声明“复杂对象类型不能转换为简单值”。对于包含 cfloop 的行。我正在使用 Coldbox 框架,它的调试器信息显示 arguments.values 是一个带有标签和值列的查询。

4

1 回答 1

10

在 CF10 之前,cfloop的查询属性只能是字符串——查询的名称——而不是变量本身。

因此,当您#arguments.values#尝试将复杂的查询对象转换为字符串时,以获取名称,这就是错误的来源。

它在 CF10 中有效,因为该属性已更新为也允许查询值。


旁注:

这行代码可以简化:

<cfset out = '#out#<option value="#value#">#label#</option>'>

至:

<cfset out &= '<option value="#value#">#label#</option>'>

此外,您很可能应该HtmlEditFormat在至少标签上使用 *,也许还应该使用 value。

*(或者encodeForHtml如果它只需要在 CF10+ 中工作)

于 2012-12-21T00:33:29.080 回答