30

我在经典 ASP 页面中有以下 VBScript:

function getMagicLink(fromWhere, provider)
    dim url 
    url = "magic.asp?fromwhere=" & fromWhere
    If Not provider is Nothing Then ' Error occurs here
        url = url & "&provider=" & provider 
    End if
    getMagicLink = "<a target='_blank' href='" & url & "'>" & number & "</a>"
end function

我不断收到一条“需要对象”错误消息,上面写着If Not provider Is Nothing Then.

该值要么是 NULL,要么不是 NULL,那么为什么会出现此错误?

编辑:当我调用对象时,我传入 NULL,或者传入一个字符串。

4

3 回答 3

39

从您的代码来看,它看起来像是provider一个变体或其他一些变量,而不是一个对象。

Is Nothing仅用于对象,但稍后您说它应该是 NULL 或 NOT NULL 的值,这将由IsNull.

尝试使用:

If Not IsNull(provider) Then 
    url = url & "&provider=" & provider 
End if

或者,如果这不起作用,请尝试:

If provider <> "" Then 
    url = url & "&provider=" & provider 
End if
于 2013-01-24T17:54:13.137 回答
23

我在评论中看到很多混乱。Null,主要用于数据库处理,通常不用于 VBScript IsNull()vbNull如果调用对象/数据的文档中没有明确说明,请不要使用它。

要测试变量是否未初始化,请使用IsEmpty(). 要测试变量是否未初始化或包含"",请测试""Empty。要测试变量是否为对象,请使用IsObjectand 查看此对象是否在 上没有引用测试Is Nothing

在您的情况下,您首先要测试变量是否为对象,然后查看该变量是否为Nothing,因为如果它不是对象,则在测试时会收到“需要对象”错误Nothing

在您的代码中混合和匹配的代码段:

If IsObject(provider) Then
    If Not provider Is Nothing Then
        ' Code to handle a NOT empty object / valid reference
    Else
        ' Code to handle an empty object / null reference
    End If
Else
    If IsEmpty(provider) Then
        ' Code to handle a not initialized variable or a variable explicitly set to empty
    ElseIf provider = "" Then
        ' Code to handle an empty variable (but initialized and set to "")
    Else
        ' Code to handle handle a filled variable
    End If
End If
于 2013-01-25T08:51:17.170 回答
0

我将在变量末尾添加一个空白 ("") 并进行比较。即使该变量为空,像下面这样的东西也应该起作用。您还可以修剪变量以防出现空格。

If provider & "" <> "" Then 
    url = url & "&provider=" & provider 
End if
于 2016-08-12T17:38:46.560 回答