1

したがって、私はMVC以外のWeb開発にかなり慣れておらず、iFrameに問題があります。

メインページには、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が表示されます。そのとき、loading関数を呼び出します。現在のところ、これは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();
}

srcコードでは、デフォルトでフレームのURLを空白のままにします。(スクリプトで設定するだけにしてください)

于 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 が最初から言っていたこととほとんど同じであることがわかりました)

編集:マーカスが親切に指摘したように、srcバックを「about:blank」にリセットする必要はなかったので、それに応じてコードを更新しました (そして少し効率的になりました)。

于 2012-10-08T17:22:37.127 に答える