【问题标题】:Call parent page javascript from within UpdatePanel inside iFrame从 iFrame 内的 UpdatePanel 中调用父页面 javascript
【发布时间】:2013-10-14 23:37:30
【问题描述】:

我遇到了从我的 UpdatePanel(即 iFrame 中)调用 javascript 的问题。我可以使用 parent.functionName() 从 iFrame 中毫无问题地调用父页面 javascript。

这是在我的 pageName.aspx.cs 中。 (代码由 KP (ASP.Net - Javascript inside AJAX UpdatePanel))

protected override void Page_Load(object sender, EventArgs e)
{
    base.Page_Load(sender, e);

    StringBuilder scriptStringB = new StringBuilder();
    scriptStringB.Append("<script type=\"text/javascript\">");
    scriptStringB.Append("function CloseiFrame() {");
    scriptStringB.Append(" alert(\"CloseiFrame\");");
    scriptStringB.Append(" CloseiFrameThroughParent();");
    scriptStringB.Append("}");
    scriptStringB.Append("</script>");

    RegisterClientStartupScript("CloseiFrame", scriptStringB.ToString());
}
private void RegisterClientStartupScript(string scriptKey, string scriptText)
{
    ScriptManager sManager = ScriptManager.GetCurrent(this.Page);

    if (sManager != null && sManager.IsInAsyncPostBack)
    {
        //if a MS AJAX request, use the Scriptmanager class
        ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), scriptKey, scriptText, false);
    }
    else
    {
        //if a standard postback, use the standard ClientScript method
        scriptText = string.Concat("Sys.Application.add_load(function(){", scriptText, "});");
        this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(), scriptKey, scriptText, false);
    }
}

我尝试过其他方式,例如使用 Microsoft 方式 (http://msdn.microsoft.com/en-us/library/z9h4dk8y.aspx)。

在 pageName.aspx 中看起来像这样:

<form id="Form1" class="iFrameForm" method="post" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
        <Scripts>
            ...Scripts are included here
        </Scripts>
    </asp:ScriptManager>
    <asp:UpdatePanel runat="server" id="UpdatePanel" updatemode="Conditional">
        <ContentTemplate>
            <asp:imagebutton id="ExitButton" runat="server" 
                           ImageUrl="~/exit.png" 
                           AlternateText="<%$ Resources:Resource, Exit %>" ToolTip="<%$ Resources:Resource, Exit %>" OnClick="Exit_Click" >
            </asp:imagebutton>
        </ContentTemplate>
    </asp:UpdatePanel>
</form>

当然还有更多内容,但这些是基础知识。该按钮已生成,并且在“action”表单的末尾有“jscriptfunction=CloseiFrame”。

但是没有警报,更不用说被调用的函数了。我当然可以使用服务来解决所有这些问题,但我真的很想在 pages&javascript 中解决这个问题。

【问题讨论】:

    标签: c# javascript asp.net iframe updatepanel


    【解决方案1】:

    'A' 解决方案已找到。使用 Page_Load 检查它是回发还是正常页面加载,我可以从那里调用 javascript 函数。

    protected override void Page_Load(object sender, System.EventArgs e)
    {
        base.Page_Load(sender, e);
    
        if (IsPostBack) //If it is a postback close the popup
        {
            StringBuilder scriptStringB = new StringBuilder();
            scriptStringB.Append("<script type=\"text/javascript\">");
            scriptStringB.Append(" CloseiFrameThroughParent();");
            scriptStringB.Append("</script>");
    
            RegisterClientStartupScript("CloseiFrameThroughParent", scriptStringB.ToString());
        }
    }
    

    但我必须说,它并不漂亮......

    【讨论】:

      猜你喜欢
      • 2010-09-20
      • 2013-02-23
      • 2011-10-19
      • 1970-01-01
      • 2013-02-16
      • 1970-01-01
      • 1970-01-01
      • 2017-04-28
      相关资源
      最近更新 更多