WebBrowser Control обновляет скрытое поле - PullRequest
0 голосов
/ 02 сентября 2011

Я пытаюсь изменить значение в скрытом поле в элементе управления WebBrowser.

Я могу ввести Javascript, который отображает окно с предупреждением.Я могу заставить окно предупреждения показывать текущее значение скрытого поля.Однако я не могу изменить значение скрытого поля.

Я попытался изменить значение, выполнив это (tb - элемент управления WebBrowser):

HtmlElement head = tb.Document.GetElementsByTagName("head")[0];
HtmlElement scriptEl = tb.Document.CreateElement("script");
IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement;
element.text = "function DoIt() { document.getElementById('TestHiddenField').value='Hello World'; alert('Updated'); }";
head.AppendChild(scriptEl);
tb.Document.InvokeScript("DoIt");

В приведенном выше сообщении всплывает предупреждение.

И у меня естьпопробовал это:

tb.Document.Body.InnerHtml = tb.Document.Body.InnerHtml.Replace("MyValue", "YourValue");

Выше я вижу, что InnerHtml изменяется при отладке.

Однако, когда страница загружается и я просматриваю источник, значение никогда не меняется.

Кроме того, даже несмотря на то, что я могу ввести javascript, и он выдает предупреждение, я так и не смог найти javascript в коде.

Что происходит?Что я делаю не так?

Спасибо!

ОБНОВЛЕНИЯ:

  • Я делаю это в событии DocumentCompleted.

  • Я не использую ViewState

ДРУГОЕ ОБНОВЛЕНИЕ:

Я добавил еще одно поле.На этот раз не скрытое текстовое поле.

<input type="hidden" id="TestHiddenField" value="MyValue" name="TestHiddenField" />
<input type="text" id="TestField" value="MyValue" name="TestField" />

Вот что происходит, когда я делаю это:

tb.Document.Body.InnerHtml = tb.Document.Body.InnerHtml.Replace("MyValue", "YourValue");

Когда страница отображается в элементе управления WebBrowser, в текстовом поле отображается текст«YourValue», но когда я просматриваю источник, значение все равно равно «MyValue».

Что с этим?Мне нужно, чтобы оно равнялось "YourValue".

Есть идеи?

Еще раз спасибо!

Ответы [ 2 ]

0 голосов
/ 02 сентября 2011

Однако, когда страница загружена и я просматриваю источник, значение никогда не изменяется.

Не изменяйте DOM до тех пор, пока после страница не будет завершенапогрузка.Вам нужно дождаться, пока не сработает событие DocumentCompleted.

0 голосов
/ 02 сентября 2011

Так как это код на стороне сервера, вы должны использовать элемент управления ASP.NET и просто изменить значение. Если бы я угадал, что не так, скорее всего, это касается одной из двух вещей:

  1. вы устанавливаете значение перед тем, как установить «начальное значение» в своем коде. Поскольку у вас нет событий в списке, я понятия не имею, правильно ли это.
  2. Вы используете viewstate, и значение viewstate перезаписывается, поскольку вы проходите довольно сложный способ изменения значений.

Если вы хотите увидеть, где что-то происходит, рассмотрите возможность добавления всех событий страницы, установки точек останова и отслеживания значения элемента управления. Вы довольно быстро найдете место, где что-то происходит.

...