2015-10-13 96 views
0

我已經使用Iframe在我的Default.aspx頁面中加載驗證碼圖片。在Captcha.aspx文件中,我生成了隨機數並將該隨機數賦給了一個隱藏字段。使用javascript訪問iframe內的隱藏字段控件?

Captcha.aspx:

<asp:hiddenField runat="server" ID="hdnCaptcha"/> 

Captcha.aspx.vb:

hdnCaptcha.Value = randomNumber

的Default.aspx:

<iframe id="ifrm" src="Captcha.aspx"/> 

的Javascript:

var iframe = document.getElementById('ifrm'); 
var innerDoc = iframe.contentDocument || iframe.contentWindow.document; 
var captcha = innerDoc.getElementById('hdnCaptcha').value; 

隱藏字段的驗證碼值總是返回null。如何從iframe源頁面訪問隱藏字段值?

回答

1

ASP.NET在生成的html中生成ID,這比您在aspx標記中看到的要長。所以你可以做的是:

  1. 插入真正的客戶端id到javascript中。如果JS代碼在aspx文件本身,而不是在一個單獨的js文件這隻會工作:

    var captcha = innerDoc.getElementById('<%= hdnCaptcha.ClientID %>').value; 
    

    既然你正在處理IFRAME這可能不是你的選擇。然後參考

  2. 將隱藏字段的ID模式設置爲靜態。這將迫使ASP.NET按原樣輸出id,不需要添加。記住,在這種情況下,它是你的工作,以保證只有一個與此ID的iframe頁面上控制:除的ClientIDMode =「靜態」選項

    <asp:HiddenField runat="server" ID="hdnCaptcha" ClientIDMode="Static" /> 
    
+0

我已經嘗試了一切。這種技術是否會與ajax更新面板控件相沖突? – RGS

+0

@RGS,應該沒問題,只要你堅持頁面上唯一id的規則即可。即使你不這樣做 - 你可能會逃避這一切,頁面不會崩潰,只是JavaScript不能保證與多個相同的ID正確工作 – Andrei

+0

非常感謝。 – RGS