VB.NET SetAttribute в WebBrowser не работает

Ранее я провел некоторые исследования, но не все ответы работают. Атрибут "value" существует в элементе, но не отображается ни в веб-браузере, ни во входных данных. Это мой код до тех пор, мне нужно, чтобы веб-браузер прочитал html-файл, а затем загрузил ваши ответы или значения из ваших входных данных из базы данных.

PS: Мое приложение создается в режиме реального времени, на экране нет управления веб-браузером, оно создается вскоре после чтения html-файла и только потом помещается внутрь панели.

    Dim webBrowser As WebBrowser = New WebBrowser
    Dim _doc As HtmlDocument
    Dim htmlPath As String = "C:\ePrimeCare\Platis\Debug\Protocolos\" + 
    nomeProtocolo + "_" + idSistema.ToString() + ".html"
    webBrowser.ScriptErrorsSuppressed = True
    webBrowser.Navigate(htmlPath)
    _doc = webBrowser.Document.OpenNew(False)
    'webBrowser.DocumentText = IO.File.ReadAllText(htmlPath).ToString()
    'webBrowser.Document.OpenNew(False)
    'RetornaRespostasAnteriores(idSistema, idFicha, nomeProtocolo, _doc, Convert.ToDateTime(dtVisita))
    _doc.Title = nomeProtocolo
    _doc.Write(IO.File.ReadAllText(htmlPath).ToString())
    Dim carregaRespostas As CarregarRespostaProtocoloHTML = New CarregarRespostaProtocoloHTML
    Dim respostas As DataTable = carregaRespostas.BuscarRespostasProtocoloAnterior(idFicha, idSistema, dtVisita)

    Dim idopcaoitem As String = 0
    Dim idsetitem As String = 0
    Dim value As DataRow()
    Dim strArr As String()
    For Each element As HtmlElement In _doc.GetElementsByTagName("input")
        Dim type As String = element.GetAttribute("type")
        Select Case type
            Case "text"
                strArr = element.GetAttribute("id").Split("_") 'For get the two ids
                idopcaoitem = strArr(0)
                value = respostas.Select(("IDOPCAOITEM = " + idopcaoitem.ToString()))
                If value.Length > 0 Then
                    element.SetAttribute("value", value(0)(2).ToString())'Here i try to set the value, but does not work
                End If
            Case "radio"
                Debug.WriteLine("Input de radio")
            Case "checkbox"
                Debug.WriteLine("Input de checkbox")
            Case "hidden"
                Debug.WriteLine("Input de hidden")
            Case Else
                Debug.WriteLine("Outro input")
        End Select
    Next
    _doc.Write(IO.File.ReadAllText(htmlPath).ToString())
    webBrowser.Refresh(WebBrowserRefreshOption.Completely)
    webBrowser.Dock = Dock.Fill
    pnlMain.Controls.Add(webBrowser)

person Carlito Murta    schedule 07.06.2018    source источник
comment
Почему вы переходите к файлу, а затем создаете новый документ только для того, чтобы снова загрузить файл? Удалите последний и придерживайтесь только навигации по нему.   -  person Visual Vincent    schedule 08.06.2018


Ответы (1)


Все ваши изменения документа и обновление, которое вы делаете в конце, перезапишут любые изменения, которые вы в него внесли.

'Either of these will revert the document back to its original state.
_doc.Write(IO.File.ReadAllText(htmlPath).ToString())
webBrowser.Refresh(WebBrowserRefreshOption.Completely)

Вам даже не нужно вызывать _doc.Write(), так как WebBrowser1.Navigate(htmlPath) будет работать так же хорошо.

Новый код:

Dim webBrowser As New WebBrowser 'Shorthand statement.
Dim _doc As HtmlDocument
Dim htmlPath As String = "C:\ePrimeCare\Platis\Debug\Protocolos\" + 
nomeProtocolo + "_" + idSistema.ToString() + ".html"
webBrowser.ScriptErrorsSuppressed = True
webBrowser.Navigate(htmlPath)
_doc = webBrowser.Document 'Removed OpenNew().
_doc.Title = nomeProtocolo

Dim carregaRespostas As New CarregarRespostaProtocoloHTML 'Another shorthand statement.
Dim respostas As DataTable = carregaRespostas.BuscarRespostasProtocoloAnterior(idFicha, idSistema, dtVisita)

(...your variables...)

For Each element As HtmlElement In _doc.GetElementsByTagName("input")

    (...your code...)

Next

'(Removed _doc.Write() and Refresh() since they will undo all changes)

webBrowser.Dock = Dock.Fill
pnlMain.Controls.Add(webBrowser)
person Visual Vincent    schedule 08.06.2018
comment
Большое спасибо, я застрял в этом в течение 2 дней! Глупая логическая ошибка хахахаха - person Carlito Murta; 08.06.2018
comment
@CarlitoMurta: Рад, что смог помочь! Удачи тебе с твоим проектом! :) - person Visual Vincent; 08.06.2018