1

iFrame 内の UpdatePanel 内から javascript を呼び出す際に問題が発生しました。parent.functionName() を使用して、iFrame 内から問題なく親ページの JavaScript を呼び出すことができます。

これは、私の pageName.aspx.cs 内にあります。(KP によるコード ( ASP.Net - AJAX UpdatePanel 内の Javascript ))

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>

もちろん他にもありますが、基本は以上です。ボタンが生成され、フォーム「アクション」の最後に「jscriptfunction=CloseiFrame」が含まれます。

しかし、呼び出されている関数は言うまでもなく、アラートはありません。もちろん、サービスを使用してこれらすべてを回避することもできますが、ページと JavaScript 内でこの問題を解決したいと考えています。

4

1 に答える 1

0

「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());
    }
}

しかし、私は言わなければならない、それはきれいではありません...

于 2013-10-09T08:01:18.657 に答える