使用iframe的asp.net模式,子页面在父加载时运行form_load代码

时间:2017-12-13 14:05:51

标签: asp.net iframe

我有一个aspx页面调用Scheduler.aspx,它有一个带有转发器的更新面板,在转发器中ItemTemplate我有一个ModalPopupExtender,它有一个iFrame到另一个aspx页面调用这个Update.aspx

在Update.aspx页面的form_load中,代码检查来自另一个系统的一些更新,并将提醒用户发生了一些更新,

我发现的是当Scheduler.aspx页面加载update.aspx中的函数时被触发,所以我得到了一些警报,但是直到我进入模式中的Update.aspx之前不希望这样,

该函数在if(!Page.IsPostback)中但无论如何我可以判断该页面是加载实际还是仅加载父页面

Scheuler.aspx示例标记

<asp:UpdatePanel ID="updMon" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
<ContentTemplate>
    <asp:Repeater ID="rptMon" runat="server" OnItemCreated="rptMon_ItemCreated">
        <HeaderTemplate>
        </HeaderTemplate>
        <ItemTemplate>
                <table style="width:100%;" class='<%# sTableClass(DataBinder.Eval(Container.DataItem, "DSC_ID").ToString()) %>'>
                    <tr>
                        <th>
                            <asp:LinkButton style="color:#717171" runat="server" id="LinkButton1" href="#">
                            <%# DataBinder.Eval(Container.DataItem, "DSC_DELNAME") %></asp:LinkButton>
                        </th>
                    </tr>
                    <tr>...</tr>
                </table>
                <cc1:ModalPopupExtender ID="mpe1" runat="server" PopupControlID="pnlMon1" TargetControlID="LinkButton1" ></cc1:ModalPopupExtender>
                        <asp:Panel ID="pnlMon1" runat="server" CssClass="pnlBackGround" align="center" style = "display:none" >
                            <iframe id="iFrm1" class="iframeStyle" src='<%# "Update.aspx?id=" + Eval("DSC_ID").ToString()  %>' runat="server"></iframe>
                                <div id="divClose" style="position:relative;top:-60px;width:200px;left:450px;">
                                    <asp:Button ID="btnCloseEdit1" runat="server" class="btn btn-primary" Text="Close" OnCommand="btnCloseEdit1_Command"  CommandArgument='<%# Eval("DSC_ID").ToString() %>'  />
                                </div>
                        </asp:Panel>
        </ItemTemplate>
        <FooterTemplate></FooterTemplate>
    </asp:Repeater>
</ContentTemplate>

对Update.aspx中的更新检查的调用就像这样

    protected void Page_Load(object sender, EventArgs e)
{
      if (!Page.IsPostBack)
      {
           if (Request.QueryString["id"] != null)
         {
             sID = Request.QueryString["id"].ToString();
             CheckUpdates(sID);
      }
}

2 个答案:

答案 0 :(得分:0)

由于在iframe上设置了src链接,因此它会加载任何其他资源。模式弹出窗口只是页面上的标记,最终隐藏在浏览器中,但这并不意味着它的资源无法出去加载。解决这个问题的一种方法可能是使用javascript设置src属性,并且仅在打开模态时才设置。

答案 1 :(得分:0)

欢呼声,所以这就是我的表现方式......可能不是最好的方式,但我只想到转发器中的iframe,

  <iframe id="iFrm1" class="iframeStyle" src="about:blank" runat="server"></iframe>

然后在转发器的ItemCreated中我添加了......

    protected void rptMon_ItemCreated(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            LinkButton _link = (LinkButton)e.Item.FindControl("LinkButton1");
            HtmlControl _frame = (HtmlControl)e.Item.FindControl("iFrm1");
            _link.Attributes.Add("onclick", "FrameSrc('MainContent_rptMon_" + _frame.ClientID + "'," + DataBinder.Eval(e.Item.DataItem, "DSC_ID") + ");return false;");
         }
    }

然后我有一个javascript函数

    function FrameSrc(frame, id) {
    document.getElementById(frame).src = 'ScheduleUpdate.aspx?id=' + id;
    }