не может сделать вызов ASP.NET из ASP вернуть строку [], которая может быть использована - PullRequest
0 голосов
/ 13 сентября 2010

Я определенно искал это, но не могу найти ответ, хотя это кажется таким тривиальным.

У меня в ASP.NET есть переменная, которая возвращает строку.

string[] arrayOfThings { get { return new string[] { ... } } }

И у меня есть вызов в ASP

Dim someString
For Each someString In someClass.arrayOfThings
    # Do Something with someString
Next

Это не работает. Возвращает исключение «несоответствие типов».

Когда я пытаюсь отладить, IsArray (someClass.arrayOfThings) возвращает True, но у него нет ни Count, ни атрибутов, ни ничего. UBound (someClass.arrayOfThings) равен 0, чего я и ожидал, поскольку в нем всего 1 элемент. Однако я не могу сослаться на элемент с помощью someClass.arrayOfThings (0)

Я новичок в ASP, но не могу понять, что я делаю не так. Я бы так хотел, чтобы ASP был строго набран.

Редактировать: я попытался создать массив с тем же значением и сравнить его с тем, что я получаю из arrayOfThings, и в окне отладчика они выглядят одинаково, но в одном случае я могу пройти по нему, а в другом - не могу .

Просто к вашему сведению, в настоящее время у меня это работает так:

У меня в ASP.NET есть переменная, которая возвращает строку.

string arrayOfThings { get { return String.Join(",", new string[] { ... }) } }

А потом в ASP

Dim someString
For Each someString In Split(someClass.arrayOfThings, ",")
    # Do Something with someString
Next

И это работает.

1 Ответ

1 голос
/ 14 сентября 2010

Используйте этот подход вместо: -

 object[] arrayOfThings { get { return new object[] { ... } } } 

Проблема с использованием строкового массива состоит в том, что он маршалирует как SAFEARRAY BSTR в COM. Однако VBScript может справиться только с SAFEARRAY из VARIANT. Использование объекта должно привести к массиву Variant.

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