【问题标题】:WebBrowser Control update hidden fieldWebBrowser Control 更新隐藏字段
【发布时间】:2011-11-09 05:28:56
【问题描述】:

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

有什么想法吗?

再次感谢!

【问题讨论】:

    标签: c# winforms webbrowser-control


    【解决方案1】:

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

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

    【讨论】:

    • 我在 DocumentCompleted 事件中这样做。
    【解决方案2】:

    由于这是服务器端代码,您应该使用 ASP.NET 控件并简单地更改值。如果我要猜测出了什么问题,它很可能涉及以下两种情况之一:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-16
      • 2011-09-16
      • 1970-01-01
      • 2012-06-28
      • 2013-09-02
      • 2014-10-04
      • 2011-06-20
      相关资源
      最近更新 更多