从子页面弹出窗口访问父页面上的控件的最佳方法是什么?

时间:2013-06-26 07:22:57

标签: asp.net .net-2.0

我有一个父ASP.NET页面,其中有一个链接,以弹出窗口的形式打开子ASPX页面。

我需要从弹出页面的代码隐藏控制父页面。例如,enablie /禁用父页面中标签的可见性,或设置文本框的文本值。

我该如何做到这一点?

用于打开弹出窗口ASPX的代码:

//JavaScript function:
function showPopup()
{
     var strReturn = window.open("TaxReportInputsForm.aspx",'popup','width=390,height=120');
}

按键代码:

Page.ClientScript.RegisterStartupScript(GetType(), "popup", "showPopup();", true);

2 个答案:

答案 0 :(得分:1)

您遇到的问题是HTTP是无状态的,因此每个HTTP请求/页面都是完全独立处理的 - 这意味着无法直接修改父页面上呈现的内容处理来自子页面的请求。

然而,你可以做的是间接地修改通过让孩子将一些标志/信息写出到孩子和父页面都可以访问的某个地方,然后拥有父母而呈现的内容页面查看该信息以确定要呈现的内容。有许多不同的地方可以存储这种状态,例如

例如,您的子页面可能会在代码隐藏中为cookie写一个ShowSomeLabel标志,然后当子页面返回到客户端时,它会强制刷新父页面,然后在代码中 - 在父页面后面,它可以从cookie中读取该标志,以确定哪些标签应该可见。

所有这些方法都需要至少某些 JavaScript才能刷新父页面,但有些需要额外的JavaScript才能将隐藏的字段/查询字符串值从子页面复制到父页面提交之前的页面。您应该在何处以及如何存储此信息取决于您的具体要求。

答案 1 :(得分:0)

你可以尝试使用javascript, 假设A.aspx是父页面,B.aspx是打开的页面, 你可以使用“opener”来控制A.aspx的DOM。

A.aspx链接标记和javascript:

<a href="B.aspx" target="_blank">open page B</a>
<script type="text/javascript">
    function fun_A() {
        alert("hello");
    }
</script>

B.aspx

<input id="btnChild" type="button" value="call function in Page A" onclick="opener.fun_A();" />

从A.aspx打开B.aspx,然后点击B.aspx中的按钮, 你会看到A.aspx警告信息“你好”。

希望这可以帮到你。