2012-01-09 65 views
5

Tôi cần phải sử dụng cấu trúc lớp trong asp cổ điển. Tôi đã viết sau ba lớp.Cấu trúc lớp trong asp cổ điển

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> 

Khi tôi chạy mã này, tôi đã tìm thấy một số vấn đề. Lỗi là:

Microsoft VBScript runtime (0x800A01B6) Đối tượng không hỗ trợ tài sản hoặc phương pháp:.? 'CategoryVar"

Làm thế nào có thể giải thích điều này Xin hãy giúp tôi

+0

Bạn đã thử 'Đặt ItemVar.Category = CategoryVar'? –

+0

tôi đã sao chép lỗi của bạn, thật lạ! – Rafael

Trả lời

8

Trong VBScript, nếu bạn biết thuộc tính sẽ chứa tham chiếu đối tượng, bạn phải xác định nó bằng cách sử dụng câu lệnh Property Set. Hơn nữa, bạn phải sử dụng câu lệnh Set khi gán tham chiếu đối tượng cho biến. Với ý nghĩ đó, những thay đổi sau đây cần phải được thực hiện:

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

tôi. đã thử nghiệm mã trên của bạn và, trong khi tôi đã nhận được một lỗi, nó không phải là một trong những bạn đã đề cập.

Trước hết bạn đang xác định Name hai lần trong lớp Item, một trong những phải là Item. có nghĩa là, bạn chỉ định ItemVar.Category = CategoryVar nhưng lớp Item không có Category Thuộc tính.

Đây là mã tôi đã sử dụng để thử nghiệm và nó hoạt động tốt:

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

FYI, câu hỏi đã được chỉnh sửa kể từ khi câu trả lời này được đăng. Lỗi đánh máy bạn đề cập không còn trong câu hỏi. –

0

tôi gặp phải những vấn đề tương tự như Rory, xác định lại tên, và có là không có tài sản loại.

Tôi đã điều chỉnh mã bên dưới để xem xét câu hỏi đã chỉnh sửa:

Nếu nó không giống như dưới đây?

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 
+0

Tôi đã cập nhật câu hỏi của mình. – zanhtet

Các vấn đề liên quan