我遇到一系列涉及response.write的ASP代码问题

时间:2011-12-26 17:54:03

标签: asp-classic vbscript

好的伙计们,我正在尝试在Classic ASP中编写一行代码来获取一个按钮,该按钮将触发它转到带有querystring变量的另一个页面。但是我很难让它工作。

到目前为止,这是我的代码:

response.write "<td valign='top'><input type='button' name='cmdUpdateInfo' value='Update Info' tabindex='7' onclick='window.location=updatecustomer.asp?UpdateID=""'" & rs("ID") & "'""/></td>" & vbCrLf

处理此行时,我的ASP处理器出现以下错误: 错误类型: (0x80020009) 发生了异常。 /ls_internal/newinvoice.asp,第325行

第325行是上面的代码行。我知道这很简单,但对于我的生活,我似乎无法弄明白。

提前谢谢。

3 个答案:

答案 0 :(得分:5)

对于一个你应该使用双引号用于html属性,单个用于javascript所以

onclick=window.location=updatecustomer.asp?UpdateID=""'" & rs("ID") & "'"" />

应该是

onclick=""window.location='updatecustomer.asp?UpdateID=" & rs("ID") & "'"" />

除此之外,您应该直接输出html,而不必将asp作为要打印的字符串处理。

我的意思是代替您可以做的整个response.write .....

%><td valign="top"><input type="button" name="cmdUpdateInfo" value="Update Info" tabindex="7" onclick="window.location='updatecustomer.asp?UpdateID=<%=rs("ID")%>'"/></td>
<%

答案 1 :(得分:1)

正如您目前编写的代码行一样,它将转换为

<td valign='top'><input type='button' name='cmdUpdateInfo' value='Update Info'
tabindex='7' onclick='window.location=updatecustomer.asp?UpdateID="'999'"/></td>

假设rs(“id”)包含值999.这行代码没有任何问题,我要做的第一件事是注释掉rs(“id”)元素并查看页面是否运行确定。

如果没有,那么我会进一步检查你的页面 - 你确定你的SQL查询返回了什么吗?我想知道你的rs是否为空(不是NULL值,我的意思是没有返回记录)在这种情况下,你需要在代码中添加IF NOT rs.eof THEN条件。

就我个人而言,我会按照Gaby又名G.Petrioli的推荐将HTML属性转换为双引号,将JavaScript转换为单引号。

答案 2 :(得分:0)

由于这是一个循环,我宁愿不打破ASP代码,而是使用一种“模板”:

Dim cellTemplate
cellTemplate = "<td valign=""top""><button type=""button"" name=""cmdUpdateInfo"" tabindex=""7"" onclick=""window.location = 'updatecustomer.asp?UpdateID=$id';"">Update Info</button></td>"

Do Until rs.EOF
    response.write Replace(cellTemplate, "$id", rs("ID")) & vbCrLf
    rs.MoveNext
Loop

这更优雅,不会创建意大利面条代码,另外你最好使用普通按钮而不是<input>元素。