【问题标题】:Accessing asp.net hidden field control inside iframe using javascript?使用javascript访问iframe中的asp.net隐藏字段控件?
【发布时间】:2015-10-13 17:48:34
【问题描述】:

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

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 源页面访问隐藏字段值?

【问题讨论】:

    标签: javascript asp.net vb.net iframe captcha


    【解决方案1】:

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

    1. 在 javascript 中插入真实的客户端 ID。仅当 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" />
      

    【讨论】:

    • 我已经尝试了除 ClientIDMode="Static" 选项之外的所有方法。这种技术会不会和ajax更新面板控件发生冲突?
    • @RGS,应该没问题,只要你遵守页面唯一id的规则。即使你不这样做 - 你可能会侥幸逃脱,页面不会崩溃,只是 javascript 不能保证在多个相同的 ID 下正常工作
    猜你喜欢
    • 2018-11-20
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多