0

我正在使用查询来动态创建表单字段,并非所有字段都使用 range 属性。使用该cfif语句包含或排除范围属性时,出现错误:

请参见下面的代码:

<cfoutput>
    <input type="hidden" name="question_ids" id="question_ids" value="#valueList(rsQuestions.question_id)#">
</cfoutput>
<cfoutput query="rsQuestions" group="modid">
    <table border="1" cellpadding="4" cellspacing="4" bgcolor="##0E777A" >
    <tr>
        <td colspan="2"><span class="style1">#rsQuestions.ModName#</span></td>
    </tr>
    <cfoutput>
    <tr>
        <td width="700" bgcolor="##FFFFFF">#rsQuestions.question#</td>
        <td width="200" bgcolor="##FFFFFF">
        <cfif rsQuestions.question_type_id eq 1>
            <cfinput type="text" name="answer_#rsQuestions.question_id#" 
                message="#rsQuestions.Message#" 
                tooltip="#rsQuestions.Tooltip#" 
                validate="#rsQuestions.Validate#"
                <cfif #rsQuestions.Range# neq "">
                    range = "#rsQuestions.Range#"
                </cfif>
                required="#rsQuestions.mandatory#"
                size="#rsQuestions.Size#">
        <cfelseif rsQuestions.question_type_id eq 2>    
            <cfquery name="rsOptions" datasource="dsTest">
            SELECT     option_id, [option], question_id
            FROM         questionnaire_question_options
            WHERE     (question_id = #rsQuestions.question_id#)
            </cfquery>
            <cfselect enabled="yes" 
                name="answer_#rsQuestions.question_id#" 
                multiple="no" 
                query="rsOptions" 
                value="option" 
                display="option">
            </cfselect>   
        </cfif>   
        </td>
    </tr>
    </cfoutput>
    </table>
</cfoutput> 

如何构建上述语句以包含或排除“范围”属性?

4

2 回答 2

1

正如 user8675309(Jenny?)所提到的,您不能<cfif>将标签嵌套在另一个 CF 标签内。因此,您需要将这些语句分开。这是您可以做到的一种方法:

....
<cfif rsQuestions.question_type_id eq 1>
    <cfif rsQuestions.Range neq "">
        <cfinput type="text" name="answer_#rsQuestions.question_id#" 
            message="#rsQuestions.Message#" 
            tooltip="#rsQuestions.Tooltip#" 
            validate="#rsQuestions.Validate#"
            range="#rsQuestions.Range#"
            required="#rsQuestions.mandatory#"
            size="#rsQuestions.Size#">
    <cfelse>
        <cfinput type="text" name="answer_#rsQuestions.question_id#" 
            message="#rsQuestions.Message#" 
            tooltip="#rsQuestions.Tooltip#" 
            validate="#rsQuestions.Validate#"
            required="#rsQuestions.mandatory#"
            size="#rsQuestions.Size#">
    </cfif>
<cfelseif rsQuestions.question_type_id eq 2>    
....
于 2013-09-20T12:21:47.130 回答
0

如前所述,您不能将一个cfif(或任何 CF 标记)嵌套在另一个 CF 标记中。

如果您真的需要动态属性,您可以做的一件事是使用“attributeCollection”属性。(ColdFusion 8 或更高版本。)

就像是:

<cfset inputAttr=structNew()>
<cfset inputAttr.type="text">
<cfset inputAttr.name="answer_#rsQuestions.question_id#">
<cfset inputAttr.message="#rsQuestions.Message#">
<cfset inputAttr.tooltip="#rsQuestions.Tooltip#">
<cfset inputAttr.validate="#rsQuestions.Validate#">
<cfif rsQuestions.Range neq "">
  <cfset inputAttr.range = "#rsQuestions.Range#">
</cfif>
<cfset inputAttr.required="#rsQuestions.mandatory#">
<cfset inputAttr.size="#rsQuestions.Size#">

<cfinput attributecollection="#inputAttr#">
于 2013-09-16T12:46:21.887 回答