5
votes

I need to use class structure in classic asp. I have written following three classes.

Category.asp

<%

Class Category

    Private NameVar

    Public Property Get Name()
        Name = NameVar
    End Property

    Public Property Let Name(nameParam)
        NameVar = nameParam
    End Property

End Class

%>

Item.asp

<%

Class Item

    Private NameVar
        Private CategoryVar

    Public Property Get Name()
        Name = NameVar
    End Property

    Public Property Let Name(nameParam)
        NameVar = nameParam
    End Property

    Public Property Get Category()
        category = categoryVar
    End Property

    Public Property Let Category(categoryParam)
    CategoryVar = categoryParam
    End Property

End Class

%>

Test.asp

<%

    Dim CategoryVar
    Set CategoryVar = New Category

    CategoryVar.Name = "Weight"

    Dim ItemVar
    Set ItemVar = New Item

    ItemVar.Name = "kg"
    ItemVar.Category = CategoryVar

%>
<html>
    <head>
        <title>UoM Componet Testing</title>
    </head>
    <body>
        <%= ItemVar.Name %><br/>
    </body>
</html>

When I run this code, I have found some problem. Error is:

Microsoft VBScript runtime (0x800A01B6) Object doesn't support this property or method: 'CategoryVar'".

How can explain this? Please help me.

3
Did you try Set ItemVar.Category = CategoryVar?Shadow Wizard Hates Omicron
i have reproduced your error, it's weird!Rafael

3 Answers

8
votes

In VBScript, if you know that a property will contain an object reference, you must define it using the Property Set statement. Furthermore, you must use the Set statement when assigning object references to variables. With that in mind, the following changes need to be made:

Item.asp

Class Item

    '<snip>

    Public Property Get Category()
        ' Add Set here
        Set category = categoryVar
    End Property

    ' Change "Property Let" to "Property Set"
    Public Property Set Category(categoryParam)
        Set CategoryVar = categoryParam
    End Property

End Class

Test.asp

<%
    ' <snip>    

    ItemVar.Name = "kg"
    Set ItemVar.Category = CategoryVar

%>
0
votes

I've tested your above code and, while I did get an error, it's not the one you mentioned.

First of all you are defining Name twice in the Item class, one should be Item. Secondly, you assign ItemVar.Category = CategoryVar yet the Item class has no Category Property.

Here is the code I used to test and it works fine:

<%
    Class Category
        Private NameVar

        Public Property Get Name()
            Name = NameVar
        End Property

        Public Property Let Name(nameParam)
            NameVar = nameParam
        End Property
    End Class

    Class Item
        Private NameVar
        Private ItemVar

        Public Property Get Name()
            Name = NameVar
        End Property

        Public Property Let Name(nameParam)
            NameVar = nameParam
        End Property

        Public Property Get Item()
            Item = ItemVar
        End Property

        Public Property Let Item(itemParam)
            ItemVar = itemParam
        End Property
    End Class

    Dim CategoryVar
    Set CategoryVar = New Category

    CategoryVar.Name = "Weight"

    Dim ItemVar
    Set ItemVar = New Item

    ItemVar.Name = "kg"
    'ItemVar.Category = CategoryVar ' There is no 'Category' property in your class
%>

<html>
    <head>
        <title>UoM Componet Testing</title>
    </head>
    <body>
        <%= ItemVar.Name %><br/>
    </body>
</html>
0
votes

I encountered the same issues as Rory, redefining of name, and there being no Category property.

I have adjusted the code below to take into account the edited question:

Should it not be something like below?

Class Item      
    Private NameVar   
    Public Property Get Name()         
        Name = NameVar     
    End Property      
    Public Property Let Name(nameParam)         
        NameVar = nameParam     
    End Property      

    Private CategoryVar   
    Public Property Get Category()         
        Category = CategoryVar     
    End Property      
    Public Property Let Category(CategoryParam)         
        CategoryVar = CategoryParam     
    End Property 
End Class 




Dim CategoryVar     
Set CategoryVar = New Category      
CategoryVar.Name = "Weight"      

Dim ItemVar     
Set ItemVar = New Item      
ItemVar.Name = "kg"     
ItemVar.Category = CategoryVar.Name