2

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

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

我怎样才能做到这一点?

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

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

按钮代码:

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

2 回答 2

1

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

但是,您可以做的是通过让子页面将一些标志/信息写入子页面和父页面都可以访问的某个位置来间接修改呈现的内容,然后让父页面查看该信息以确定要呈现的内容. 有很多不同的地方可以存储这个状态,例如

  • 饼干
  • 会话变量(即服务器内存中)
  • 在页面的隐藏字段/查询字符串中

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

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

于 2013-06-26T09:35:18.820 回答
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 警报消息“hello”。

希望这可以帮到你。

于 2013-06-26T08:51:21.850 回答