【问题标题】:Pass data from popup window to parent window not working with Javascript in master page in ASP.NET将数据从弹出窗口传递到父窗口不适用于 ASP.NET 母版页中的 Javascript
【发布时间】:2025-12-18 23:45:01
【问题描述】:

我在点击页面上的按钮时打开一个模式窗口(ABC.aspx)。代码如下

protected void Button1_Click(object sender, EventArgs e)
{
    ScriptManager.RegisterStartupScript(this, this.GetType(), "ffff","myFunction();", true);
}

这个方法正在调用一个javascript函数myFunction()。此 javascript 代码存在于 Site.master 文件中。代码如下

<head runat="server">
    <title></title>
    <script type="text/javascript">

    function myFunction() {
        var myWindow = 
            window.showModalDialog("XYModalWindow.aspx", object, "width=100, height=50");
    }

    </script>
    <link href="~/SomeStyleSheet.css" type="text/css" rel="Stylesheet" />
    <asp:ContentPlaceHolder ID="HeadContent" runat="server">
    </asp:ContentPlaceHolder>
</head>

此 javascript 代码正在打开一个弹出窗口,我在其中将一些记录保存在数据库中。

目标:将数据从弹出窗口保存到数据库后,我必须将其填充到父窗口(即ABS.aspx)中。

问题:由于我的 javascript 存在于母版页中,因此我无法将数据从弹出窗口传递到父页面,就像在互联网上的几个页面上提到的那样。

我尝试在弹出窗口的会话变量中保存数据并在父窗口中访问,但这似乎不起作用。

注意:我想在不使用任何额外事件的情况下自动获取父窗口中的数据。我的意思是弹出窗口数据保存并关闭窗口,然后它应该自动在父窗口中显示该数据(无需额外的按钮点击)。

【问题讨论】:

    标签: javascript asp.net master-pages


    【解决方案1】:

    首先,看起来您有一个调用客户端代码的服务器端按钮。这是必要的吗?为什么不使用 Web 服务保存到数据库,然后在 onSuccess 回调函数中更新页面上的显示?不需要回发,您不必担心从代码隐藏事件处理程序调用客户端代码。

    尝试在弹出窗口中创建一个您需要的字段。将其样式设置为“显示:无”。例如,您将拥有一个带有按钮和文本框的隐藏字段。

    然后,创建一个事件处理程序来显示该 div - 因此当有人单击某个按钮时,使用 jQuery 将该 div 转换为一个对话框并显示它。然后,当有人单击对话框内的按钮时,您可以调用 Web 服务来更新数据库,然后相应地更新页面(例如,如果成功则执行 X,如果失败则执行 Y)。由于这些字段在加载时是页面的一部分,因此它们将具有 ID,您可以对它们的数据做任何您想做的事情。

    Jquery 对话框文档:http://jqueryui.com/dialog/

    【讨论】: