无法在 ASP.NET 中从 C# 调用 JS 函数

问题描述 投票:0回答:1

尝试通过调用从JS向父页面发送post请求

function sendPostMessage(message) {
    console.log("sending post");
    var post = { conf: message };
    parent.postMessage(post, "*");
}

来自 c# 如

private void post_to_parent(string message)
{
    Debug.WriteLine($"Sending post: {message}");
    ScriptManager.RegisterStartupScript(this, this.GetType(), Guid.NewGuid().ToString(), $"sendPostMessage(\"{message}\");", true);

}

但我没有得到任何回应。

如果我从同一个 JS 调用该函数,一切都会正常。 如果我从 C# 函数调用它,我会在调试控制台中收到消息,但在 JavaScript 控制台中不会收到任何消息。没有消息,什么都没有。

我可以用同样的方式调用其他 JS 函数,而且效果很好。

我使用的是 ASP.NET Web 表单,这将是 IFrame 中的子级向父级发送响应。

javascript c# asp.net
1个回答
0
投票

这应该可行。

假设我有一个主页,然后嵌入一个 iFrame。

所以,主机页面标记:

        <asp:Button ID="cmdToast" runat="server" Text="Server side toast inject"
            CssClass="btn"
            OnClick="cmdToast_Click"
            
            />

        <h3>Below is iFrame area</h3>

        <iframe
            src="ToastIFrame.aspx"
            >

        </iframe>


        <script>

            function mytoast(sHeading, sMessage) {

                $.toast({
                    heading: sHeading,
                    text: sMessage,
                    position: 'mid-center',
                    icon: 'info',
                    hideAfter: 5000,
                    allowToastClose: false,
                    loader: false,
                    showHideTransition: 'slide'
                });

            }

        </script>

主页按钮代码是这样的:

    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void cmdToast_Click(object sender, EventArgs e)
    {
        string sJava = @"mytoast('Toast Heading','This is a toast message<br/>From main page');";
        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "mymsg", sJava, true);
    }

在放入 iFrame 的页面中,我们有以下标记:

        <asp:Button ID="cmdTest" runat="server" Text="To parent"
            OnClick="cmdTest_Click"                
            />

        <script>

            function sendPostMessage(message) {
                console.log("sending post");

                parent.mytoast('From iFrame', message);
            }

        </script>

iFrame 中页面的隐藏代码是这样的:

    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void cmdToast_Click(object sender, EventArgs e)
    {
        string sJava = @"mytoast('Toast Heading','This is a toast message<br/>From main page');";
        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "mymsg", sJava, true);
    }

所以,我运行页面时的效果是这样的:

enter image description here

因此主页面和子页面(iFrame 中的页面)都能够注入脚本(RegisterStartUpScript),并且都能够调用父页面中相同的 JavaScript 函数。

© www.soinside.com 2019 - 2024. All rights reserved.