0

我有一个经典的 asp 页面,上面有一些选择框。由不包含输入参数的存储过程填充的框可以正常工作。

当我有一个需要用特定记录列表填充的选择框时,就会出现我的问题。这是基于用户打开的当前记录,我将其作为参数传递给存储过程。我有以下代码来调用 SP:

'Return Possible RTA Contracts
Dim RecordsetApply
Dim RecordsetApply_cmd
Dim RecordsetApply_numRows

Set RecordsetApply_cmd = Server.CreateObject ("ADODB.Command")
RecordsetApply_cmd.ActiveConnection = GLData_connection_STRING
RecordsetApply_cmd.CommandText = "return_rtacontractlist"
RecordsetApply_cmd.CommandType = adCmdStoredProc
RecordsetApply_cmd.Parameters.Append RecordsetApply_cmd.CreateParameter("ContractIDParam", adVarChar, adParamInput, 50)
RecordsetApply_cmd("ContractIDParam") = RecordsetContract__GLColParam

Set RecordsetApply = RecordsetApply_cmd.Execute
RecordsetApply_numRows = 0

就选择框填充正确的数据而言,这可以正常工作,但页面的其余部分 HTML 会停止呈现。这是选择框的代码:

<td><span id="sprytextfield24">
            <select style="font-size:12px" name="rtacontract" id="rtacontract">
                <%
                While (NOT RecordsetApply.EOF)
                    %>
                    <option value="<%=(RecordsetApply.Fields.Item("ContractID").Value)%>"><%=(RecordsetApply.Fields.Item("ContractDesc").Value)%></option>
                    <%
                    RecordsetApply.MoveNext()
                    Wend
                    If (RecordsetApply.CursorType > 0) Then
                        RecordsetApply.MoveFirst
                    Else
                        RecordsetApply.Requery
                    End If
                    %>
                </select><br />Apply Remainder To*<br />
            <span class="textfieldRequiredMsg">Field Required</span></span></td>

如果我删除参数并实际对 SP 中的记录进行硬编码,则页面会正常加载。当然,这不会作为解决方案起作用。

希望这是我犯的一个简单错误,因为我对此很陌生。

4

1 回答 1

0

服务器端代码本身看起来不错。您获得的数据很可能是“破坏” HTML(例如包含原始 HTML),因此最好对其进行编码以确保安全:

<option value="<%=Server.HTMLEncode(RecordsetApply.Fields.Item("ContractID").Value)%>"><%=Server.HTMLEncode(RecordsetApply.Fields.Item("ContractDesc").Value)%></option>
于 2013-09-29T10:14:10.963 回答