C# WebBrowser控件更新隐藏字段

C# WebBrowser控件更新隐藏字段,c#,winforms,webbrowser-control,C#,Winforms,Webbrowser Control,我试图更改WebBrowser控件中隐藏字段的值 我可以注入显示警报框的Javascript。我可以使警报框显示隐藏字段的当前值。但是,我无法更改隐藏字段的值 我已尝试通过执行以下操作来更改值tb是WebBrowser控件: HtmlElement head = tb.Document.GetElementsByTagName("head")[0]; HtmlElement scriptEl = tb.Document.CreateElement("script"); IHTMLScriptEl

我试图更改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" />
当网页在WebBrowser控件中呈现时,文本框显示文本YourValue,但当我查看源代码时,该值仍然等于MyValue

怎么回事?我需要它和你的价值相等

有什么想法吗


再次感谢

因为这是服务器端代码,所以应该使用ASP.NET控件,只需更改值即可。如果让我猜一下哪里出了问题,它很可能涉及两件事中的一件:

在代码中设置初始值之前,先设置值。由于您没有列出事件,我不知道这是否正确。 您正在使用viewstate,并且viewstate值正在被覆盖,因为您正在经历一种相当繁重的更改值的方式。

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

但是,当页面加载完毕并且我查看源代码时,该值永远不会更改


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

我正在DocumentCompleted事件中执行此操作。
tb.Document.Body.InnerHtml = tb.Document.Body.InnerHtml.Replace("MyValue", "YourValue");