我有一个经典的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中的记录,则页面正常加载。当然,这不会成为解决方案。
希望这是我犯过的一个简单错误,因为我对此很陌生。
答案 0 :(得分:0)
服务器端代码本身看起来很好。很可能你获得的数据是“打破”HTML(例如包含原始HTML),所以最好将其编码为安全的一面:
<option value="<%=Server.HTMLEncode(RecordsetApply.Fields.Item("ContractID").Value)%>"><%=Server.HTMLEncode(RecordsetApply.Fields.Item("ContractDesc").Value)%></option>