[英]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>
(並且在完成所有這些之后,因為我對jQuery沒有100%的信心 - 我意識到它幾乎就是馬格努斯從一開始就說的)
編輯:正如Marcus親切地指出的那樣,沒有必要將src
重置為“about:blank”,因此相應地更新了代碼(並且稍微提高了效率)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.