C# WebBrowser控件更新隐藏字段
我试图更改WebBrowser控件中隐藏字段的值 我可以注入显示警报框的Javascript。我可以使警报框显示隐藏字段的当前值。但是,我无法更改隐藏字段的值 我已尝试通过执行以下操作来更改值tb是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
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");