为什么会收到CInt“无效使用Null”错误?

时间:2019-03-27 18:13:03

标签: vbscript asp-classic

当付款下拉列表字段未选择任何选项时,我们遇到500服务器错误。 db接受null。服务器日志文件输出以下错误:

  

800a005e | Invalid_use_of_Null:_'CInt'HTTP / 1.1

错误日志指向此行:

If cint(iPaymentIdRS) = cint(iPaymentId) then selPayment = selPayment & " selected "

注意:我们的ASP开发人员目前不可用,因此请您提供简单的答案。

  • 我们在空的下拉字段中添加了“未选择付款方式”的值。
  • 我们确保数据库接受null。
  • 我们在线搜索了一种解决方案,但没有找到解决方案。
If sOperation = "Edit" then


    iPaymentId      = Request.Form("cboPayment") :If iPaymentId = "0" then iPaymentId = null



'**********Payment**********************

selPayment = "<option value=""0"">"

Do While rs.EOF = false
    iPaymentIdRS = rs("PaymentId")

    selPayment = selPayment & "<option value=""" & iPaymentIdRS & """"
    If cint(iPaymentIdRS) = cint(iPaymentId) then selPayment = selPayment & " selected "    
    selPayment = selPayment & ">" & rs("PaymentDesc")

    rs.MoveNext
loop

我希望一个空(空)值不会返回500错误,但是会被接受。付款下拉列表字段不是必填字段。

2 个答案:

答案 0 :(得分:2)

该错误是由于将CInt应用于空变量而引起的。

如果iPaymentId为0,则

Request.Form("cboPayment")设置为null,然后CInt(iPaymentId)尝试将iPaymentId转换为整数,而不管其值如何。 VBscript中不允许将空变量转换为整数。

线路...

If CInt(iPaymentIdRS) = CInt(iPaymentId) Then selPayment = selPayment & " selected "

...如果iPaymentId为空,则无需运行。要在运行比较之前验证iPaymentId是否已分配了数值,请将其更改为:

If IsNumeric(iPaymentId) Then : If CInt(iPaymentIdRS) = CInt(iPaymentId) Then selPayment = selPayment & " selected "

如果iPaymentId为null,则比较将不会运行,也不会发生错误。

答案 1 :(得分:0)

iPaymentId = Request.Form(“ cboPayment”) iPaymentId = iPaymentID + 0

应将其转换为整数,以便null,文本等值可以通过