繁体   English   中英

从iframe的代码隐藏访问父控件

[英]Access parent control from iframe's codebehind

所以我对非mvc web开发很新,我遇到了iFrames的问题。

在我的主页面中,我有一个复选框,通过jQuery显示和隐藏iframe。 在我的iFrame的代码隐藏中,我有一个方法loadStuff() ,如果iFrame可见,我只想运行它。 也就是说,我不想只是将它粘贴在page_load因为如果我这样做,它会在每次主页刷新时尝试运行。

所以我想我只是检查是否检查了主窗口中的复选框,如果是,请运行loadStuff()方法。

问题是,我无法弄清楚如何从iFrame的代码隐藏中访问该复选框。 看起来像this.Parent.FindControls()一些变体可以工作,但我没有任何运气。

这是我的一点点:

主页面(我们称之为mainpage.aspx):

<input type="checkbox" id="showIFrame" onclick="if(this.Clicked) $('#iframe').show(); else $('#iframe').hide();" />

//...

<div id="iframe" style="display:none;">
<iframe runat="server" id="iframeNetSheet" .../></iframe>
</div>

因此,当单击该复选框时,会显示iFrame。 那是我想要调用加载函数的时候。 截至目前,它位于iFrame的page_load中,每次加载父页面时都会被命中。

谁能让我指出正确的方向?

如果您在页面上有IFrame并且该页面已刷新,则iFrame也将刷新(每次)。 所以我没有看到任何理由检查父页面复选框值。
此外,不仅仅设置iframe的可见性(如果设置为visible并且src url为空)设置src ,只有在选中复选框时才会加载框架(并loadStuff() )。
代码看起来像这样:

<input type="checkbox" id="showIFrame" onclick="SetFrame(this.checked);" />

function SetFrame(isChecked)
{
   if(isChecked) 
   {
      $('#iframe').show(); 
      var iframeNetSheet = $('#iframeNetSheet');

      if(iframeNetSheet.attr("src") == "")
         iframeNetSheet.attr("src", "SomeUrl"); //This will invoke page_load on iframe.
   }
   else 
      $('#iframe').hide();
}

在代码中默认将帧的src url留空。 (只允许通过脚本设置)

我建议您将iFrame src设置为“about:blank”开始 - 然后当您单击复选框时设置正确的源。 像这样......

<script type="javascript">
  $(document).ready(function() {
    $("#showIFrame").click(function() {
      var frame = $("#iframeNetSheet");
      if ($("#showIFrame").prop("checked")) {
        frame.show();
        if (frame.prop("src") == "about:blank") {
          frame.attr("src", "newpage.aspx");
        }
      } else {
        frame.hide();
      }
    });
  });
</script>
<input type="checkbox" id="showIFrame" />
<iframe runat="server" id="iframeNetSheet" style="display:none;"/></iframe>

直播JSFiddle演示

(并且在完成所有这些之后,因为我对jQuery没有100%的信心 - 我意识到它几乎就是马格努斯从一开始就说的)

编辑:正如Marcus亲切地指出的那样,没有必要将src重置为“about:blank”,因此相应地更新了代码(并且稍微提高了效率)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM