所以我对非mvc网站开发很陌生,我遇到了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。那是我想要调用加载函数的时候。截至目前,它位于iFrame的page_load中,每次加载父页面时都会被命中。
有人能让我指出正确的方向吗?
答案 0 :(得分:2)
如果页面上有IFrame
且该页面已刷新,则iFrame也将刷新(每次)。所以我没有看到任何理由检查父页面复选框值。
除了设置iframe的可见性(如果设置为可见且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
个网址留空。 (只允许通过脚本设置)
答案 1 :(得分:1)
我建议您将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>
(在完成所有这些之后,因为我对jQuery没有100%的信心 - 我意识到这几乎就是马格努斯从一开始就说的话)
编辑:正如Marcus所指出的那样,没有必要将src
重置为“about:blank”,因此相应地更新了代码(并且稍微提高了效率) )。