调用.NET函数将输入作为Classic ASP中的对象

时间:2011-08-02 14:42:59

标签: asp.net asp-classic

这对我来说很奇怪。我能够设置环境,以便我可以从传统的ASP页面调用.NET方法(通过COM)。

所有内容实际上都按预期工作,直到我必须调用需要.NET类型的.NET方法。

所以我有一个名为

的方法

我在.Net

中有这样的功能
Public Sub SetTable(ByVal _City As City, ByVal _Country As Country)
          'doing some thing
End Sub

我有这样的asp代码:

dim CountryUtil, City, Country
set CountryUtil= Server.CreateObject("mydll.CountryUtil")
set city = Server.CreateObject("mydll.City")
set Country = Server.CreateObject("mydll.Country")
city.id= 123
city.property = "so and so"

Country.id= 123
Country.property = "so and so"

categoryUtil.SetTable(City, Country)

'我在这里得到这个错误:

'Microsoft VBScript运行时错误'800a0005' '无效的过程调用或参数:'SetTable'

提前致谢。

2 个答案:

答案 0 :(得分:0)

如果countryUtil是一个类,您可能必须首先启动它的新实例 而且,您可以创建新变量,而不是Set ting。不要忘记区分大小写。如果你试图通过城市而不是城市,它会给你带来麻烦。

''# Create a new instance of the categoryUtil Class
Dim countryUtil As New mydll.CountryUtil 

Dim city As New mydll.City
Dim country As New mydll.Country

city.id= 123
city.property = "so and so"

country.id= 123
country.property = "so and so"

''# Instead of using the Class directly, you use the new instance of the Class
''# and pass the lowercase variables instead of the UpperCase Classes.
countryUtil.SetTable(city, country)

修改

如果您使用的是.NET框架的更高版本,则可以像这样缩短它

''# Create a new instance of the categoryUtil Class
Dim countryUtil As New mydll.CountryUtil 

Dim city As New mydll.City With {.id = 123, .property="so and so"}
Dim country As New mydll.Country With {.id=123, .property="so and so"}


''# Instead of using the Class directly, you use the new instance of the Class
''# and pass the lowercase variables instead of the UpperCase Classes.
countryUtil.SetTable(city, country)

修改

查看此链接,了解如何混合asp和asp.net
http://knol.google.com/k/from-classic-asp-to-asp-net-and-back#

答案 1 :(得分:0)

您设置为参数值的ASP值为VARIANT。 但是你在函数中定义了不同的变量类型。

示例:

.NET代码:

Public Sub Test(param as String)

经典ASP:

Dim yourParam : yourParam = "Testvalue"
YourClass.Test(yourParam)

这会失败。

经典ASP:

Dim yourParam : yourParam = "Testvalue"
YourClass.Test(CStr(yourParam))

这样可行。

因此,在调用函数时,您需要注意设置正确的变量类型!在经典ASP中,一切都是VARIANT。 旁注:字典对象,数组很难处理,我设法在.NET中将变量定义为object[]并在类中转换它们。