为什么从带有参数的SP填充我的选择框会破坏页面,即经典ASP

时间:2013-09-25 14:48:22

标签: stored-procedures asp-classic

我有一个经典的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中的记录,则页面正常加载。当然,这不会成为解决方案。

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

1 个答案:

答案 0 :(得分:0)

服务器端代码本身看起来很好。很可能你获得的数据是“打破”HTML(例如包含原始HTML),所以最好将其编码为安全的一面:

<option value="<%=Server.HTMLEncode(RecordsetApply.Fields.Item("ContractID").Value)%>"><%=Server.HTMLEncode(RecordsetApply.Fields.Item("ContractDesc").Value)%></option>