2011-09-02 68 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

這不是服務器端代碼。 –