经典asp中的类结构

时间:2012-01-09 09:20:25

标签: asp-classic

我需要在经典的asp中使用类结构。我写了三节课。

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>

当我运行此代码时,我发现了一些问题。错误是:

  

Microsoft VBScript运行时(0x800A01B6)对象不支持此属性或方法:'CategoryVar'“。

怎么解释这个?请帮帮我。

3 个答案:

答案 0 :(得分:8)

在VBScript中,如果您知道属性将包含对象引用,则必须使用Property Set语句对其进行定义。此外,在为变量分配对象引用时,必须使用Set语句。考虑到这一点,需要进行以下更改:

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

%>

答案 1 :(得分:0)

我已经测试了上面的代码,虽然我收到了错误,但这不是你提到的那个。

首先,您要在Name类中定义Item两次,其中一个应为Item。其次,您指定ItemVar.Category = CategoryVarItem类没有Category属性。

以下是我用来测试的代码,它运行正常:

<%
    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>

答案 2 :(得分:0)

我遇到了与Rory相同的问题,重新定义了名称,并且没有Category属性。

我已调整以下代码,以考虑编辑过的问题:

它不应该像下面那样吗?

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