1

所以我对非 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 中,每次加载父页面时都会点击它。

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

4

2 回答 2

2

如果您有IFrame一个页面并且该页面被刷新,则 iFrame 也将被刷新(每次)。所以我看不出有任何理由检查父页面复选框的值。
此外,不仅仅是设置 iframe 的可见性(如果设置为可见且srcurl 为空白),还设置了并且仅在选中复选框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();
}

默认情况下,在代码中将框架的 url留空src。(只能由脚本设置)

于 2012-10-08T17:02:01.653 回答
1

我建议您首先将 iFramesrc设置为“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% 有信心——我意识到这也正是 Magnus 从一开始就说的)

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

于 2012-10-08T17:22:37.127 回答