WebBrowser控件更新隐藏字段

本文关键字:字段 隐藏 更新 控件 WebBrowser | 更新日期: 2023-09-27 18:07:15

我正在尝试更改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"

任何想法?

再次感谢!

WebBrowser控件更新隐藏字段

但是,当页面加载完成并且我查看源时,该值永远不会改变。

在页面加载完成之前,不要修改DOM。您必须等待DocumentCompleted事件触发

由于这是服务器端代码,因此您应该使用ASP。NET控件并简单地更改值。如果我猜错了什么,它很可能与以下两件事之一有关:

  1. 在代码中设置"初始值"之前设置该值。由于您没有列出事件,我不知道这是否正确。
  2. 你正在使用viewstate和viewstate值被覆盖,因为你正在经历一个相当沉重的改变值的方式。

如果您想要查看事情发生的位置,请考虑添加所有页面事件并设置断点,并观察控件的值。你会很快发现事情发生的地方。