我对 ASP.NET 相当陌生,并试图了解事情是如何完成的。我有 C# 背景,因此代码隐藏部分很简单,但像 Web 开发人员一样思考却很陌生。

我有一个包含复选框网格的 aspx 页面。我有一个通过 Button_Click 事件编码的按钮,用于收集检查的行的列表,并从该列表中创建一个会话变量。我的 ascx 页面的 ModalPopupExtender 引用了相同的按钮(通过 TargetControlID),该按钮控制 ascx 页面上的面板。

单击按钮时,模式弹出窗口将打开,但永远不会触发 Button_Click 事件,因此模式不会获取其会话数据。

由于两个页面是分开的,我无法从 aspx.cs 代码调用 ModalPopupExtender,无法从 ascx.cs 代码访问复选框列表,并且我看不到填充会话变量的方法然后以编程方式激活其他一些隐藏按钮或控件,然后打开我的模式弹出窗口。

有什么想法吗?

有帮助吗?

解决方案

所有 usercontrol(.ascx) 文件都是一组控件,您将它们组合在一起以提供一些可重用的功能。在页面生命周期中,其中定义的控件仍会添加到页面的控件集合 (.aspx) 中。ModalPopupExtender 使用 javascript 和 dhtml 来显示和隐藏用户控件客户端中的控件。您所看到的是,点击事件由 ModalPoupExtender 在客户端处理,并且取消了到服务器的回发。这是设计的默认行为。您当然可以从用户控件的代码隐藏中访问页面的控件集合,因为它都是同一控件树的一部分。只需使用任何控件的 FindControl(xxx) 方法即可搜索所需的子控件。

其他提示

经过对 DancesWithBamboo 的回答进行一些研究后,我弄清楚了如何使其发挥作用。
在我的 aspx 页面中引用我的 ascx 页面的示例:

<uc1:ChildPage ID="MyModalPage" runat="server" />

用于抓取并打开 ModalPopupExtender(名为 modalPopup)的 aspx 代码隐藏如下所示:

AjaxControlToolkit.ModalPopupExtender mpe = 
    (AjaxControlToolkit.ModalPopupExtender) 
          MyModalPage.FindControl("modalPopup");
mpe.Show();

抱歉,但我很困惑。你不能直接调用 ascx,所以......

您是从同一页面内调用的模态代码吗,例如隐藏面板等;

或者是您在单击事件上调用的另一个 aspx 页面?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top