У нас есть компонент ActiveX, который отображает веб-страницу в окне Internet Explorer через SHDocVw. В обработчике события DocumentComplete мы пытаемся извлечь значение из одного из элементов управления на странице. Мы знаем , что элемент управления находится на странице (он виден через Fiddler trace).
Именно в этот момент все становится шатким. Мы получаем следующее сообщение об ошибке во время выполнения:
Error Message:
Public member 'elements' on type 'DBNull' not found.
Error Routine Location:
at Microsoft.VisualBasic.CompilerServices.Symbols.Container.GetMembers(String& MemberName, Boolean ReportErrors)
at Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateGet(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack)
at Foo.AddinModule.m_internetExplorer_DownloadComplete(Object pDisp, Object& url)
Error Source:
Microsoft.VisualBasic
Error Site Location:
System.Reflection.MemberInfo[] GetMembers(System.String ByRef, Boolean)
Вот такая строка кода:
Me.IEInstance.Document.forms("frmRedirect").elements("redirectData").Value = outlookXML.OuterXml
Итак, по сути, Me.IEInstance.Document.forms("frmRedirect")
оценивается как DBNull
.
Мы устранили проблемы чувствительности к регистру. Попытался переместить элемент управления внутри страницы и убедился, что HTML-код правильно сформирован. Я понятия не имею, почему это происходит. Пример сгенерированного HTML приведен ниже.
Может кто-нибудь предложить причину и возможное решение этой проблемы? На данный момент я интересуюсь любыми предложениями.
Образец HTML
<form id='frmRedirect' name='frmRedirect' action='pw_outlook/choosecontacts.aspx' method='POST'>
<input type='hidden' name='redirectData'>
</form>
ОБНОВЛЕНИЕ 3/28/2012
Мы определили, что код работает нормально при определенных конфигурациях. Тогда, как ни странно, для некоторых пользователей это будет , если вы измените код следующим образом:
Me.IEInstance.Document.forms("frmRedirect").Elements("redirectData").Value = outlookXML.OuterXml
^
^
То есть, если вы просто измените регистр Elements
. Для меня это похоже на проблему чувствительности к регистру при поиске в COM vtable, но загадка в том, что это происходит не у всех. Просто некоторые пользователи.
Также обратите внимание, что форма, возвращаемая .forms("frmRedirect")
, является допустимым объектом; однако, похоже, что у него нет метода elements()
.