2011-09-02 73 views
0

我正在尝试更改WebBrowser控件中隐藏字段上的值。WebBrowser控件更新隐藏字段

我可以注入显示警告框的JavaScript。我可以让警告框显示隐藏字段的当前值。但是,我无法让隐藏字段的价值发生变化。

我曾尝试通过执行此改变的值(tb是web浏览器控件):

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代码int。

发生了什么事?我究竟做错了什么?

谢谢!

更新:

  • 我在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”。

任何想法?

再次感谢!

回答

0

但是,当页面完成加载和我查看源代码时,值永远不会改变。

不要改变后,直到页面加载完成的DOM。您必须等待DocumentCompleted事件触发。

+0

我在DocumentCompleted事件中执行此操作。 – user390480

+0

请参阅新的更新测试。 – user390480

0

由于这是服务器端代码,因此您应该使用ASP.NET控件并只更改其值。如果我猜测什么是错误的,它最有可能处理以下两件事之一:

  1. 您在设置代码中的“初始值”之前设置了值。既然你没有列出事件,如果这是正确的,我不知道。
  2. 您正在使用viewstate,并且viewstate值正在覆盖,因为您正在经历一个相当繁重的值更改方式。

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

+0

这不是服务器端代码。 –