使用CFSEARCH我将密钥变量包含为逗号分隔列表,以返回比四个自定义字段允许的更多信息。但是,系统抛出一个错误,指出无法找到列表项。
“key”变量的每个记录将具有以下格式:a,b,c
<cfsearch
name="theCourses"
collection="#arguments.collectionName#"
type="simple"
startrow="1"
maxrows="100"
criteria="#Lcase(Trim(arguments.searchCriteria))#"
contexthighlightbegin="<b>"
contexthighlightend="</b>"
status="courseListStatus"
/>
<cfset courseList = QueryNew("ID, Score, Course, Subject, Day, Title, Semester, Status", "varchar, varchar, varchar, varchar, varchar, varchar, varchar, varchar") />
<cfloop query="theCourses">
<cfset temp = QueryAddRow(courseList) />
<cfset temp = QuerySetCell(courseList, "ID", custom3) />
<cfset temp = QuerySetCell(courseList, "Score", score) />
<cfset temp = QuerySetCell(courseList, "Course", ListGetAt(key, 2, ",")) />
<cfset temp = QuerySetCell(courseList, "Subject", ListFirst(key, ",")) />
<cfset temp = QuerySetCell(courseList, "Day", custom1) />
<cfset temp = QuerySetCell(courseList, "Title", custom4) />
<cfset temp = QuerySetCell(courseList, "Semester", custom2) />
<cfset temp = QuerySetCell(courseList, "Status", ListLast(key, ",")) />
</cfloop>
我收到以下错误:
无效的列表索引2。
在函数ListGetAt(list,index [,delimiters])中,index的值2不是第一个参数的有效值(此列表有1个元素)。有效索引的范围为1到列表中的元素数。
答案 0 :(得分:3)
我担心你断言密钥的格式为“a,b,c”在这种特殊情况下显然是错误的。否则你的代码会起作用!
所以,就像任何“为什么这没有我期望的价值?”情况,当事物发生错误时,抛弃导致错误的值,并注意它有什么问题。
在这种情况下:
<cftry>
<cfset temp = QuerySetCell(courseList, "Course", ListGetAt(key, 2, ",")) />
<cfcatch>
<cfoutput>#key#</cfoutput>
<cfdump var="#cfcatch#">
<cfabort>
</cfcatch>
</cftry>
另外:如果你不打算使用它,你不需要在该表达式的LHS上设置临时变量(因为它总是“是”,我怀疑你不需要。这是细:
<cfset QuerySetCell(courseList, "Course", ListGetAt(key, 2, ",")) />