使用 javascript 访问 iframe 内的 asp.net 隐藏字段控件?

Accessing asp.net hidden field control inside iframe using javascript?

我使用 Iframe 在我的 Default.aspx 页面中加载验证码图像。在 Captcha.aspx 文件中,我生成了随机数并将随机数分配给隐藏字段。

Captcha.aspx:

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

Captcha.aspx.vb:

hdnCaptcha.Value = 随机数

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;

隐藏字段验证码值总是returns null。如何从 Iframe 源页面访问隐藏字段值?

ASP.NET 在生成的 html 中生成 ID,这些 ID 比您在 aspx 标记中看到的要长。所以你可以做的是:

  1. 将真实的客户 ID 插入 javascript。仅当 js 代码位于 aspx 文件本身而不是单独的 js 文件中时,这才有效:

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

    由于您正在处理 iframe,因此您可能无法选择。然后参考

  2. 设置隐藏字段的ID模式为静态。这将强制 ASP.NET 按原样输出 id,不添加任何内容。请注意,在这种情况下,您的工作是保证在 iframe 页面上只有一个具有此 ID 的控件:

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