Вызов функции .NET Получение входных данных как объектов из классического ASP - PullRequest
1 голос
/ 02 августа 2011

Это странно для меня.Мне удалось настроить среду так, чтобы я мог вызывать метод .NET (через COM) с классической страницы ASP.

На самом деле все работает так, как задумано, до тех пор, пока мне не придется вызывать метод .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 голосов
/ 21 февраля 2013

Значения 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[] и преобразовать их внутри класса.

0 голосов
/ 02 августа 2011

если 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 Framework,Вы можете сократить его так:

''# 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#

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...