我正在尝试更改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”。
有什么想法吗?
再次感谢!
答案 0 :(得分:0)
由于这是服务器端代码,因此您应该使用ASP.NET控件并只更改该值。如果我猜错了什么,它最有可能处理两件事之一:
如果您想查看事情发生的位置,请考虑添加所有页面事件并设置断点并观察控件的值。你会很快发现事情正在发生的地方。
答案 1 :(得分:0)
然而,当页面完成加载并且我查看源时,值永远不会改变。
在页面加载完成后之前,不要更改DOM。您必须等待DocumentCompleted事件触发。