提问人:Erick B 提问时间:8/16/2008 最后编辑:Shog9Erick B 更新时间:4/27/2010 访问量:6842
如何将数据从 aspx 页面传递到 ascx 模式弹出窗口?
How can I pass data from an aspx page to an ascx modal popup?
问:
我对 ASP.NET 很陌生,并试图了解事情是如何完成的。我来自 C# 背景,因此代码隐藏部分很容易,但像 Web 开发人员一样思考是陌生的。
我有一个包含复选框网格的aspx页面。我有一个通过Button_Click事件编码的按钮,用于收集检查哪些行的列表,并从该列表中创建一个会话变量。我的 ascx 页面的 ModalPopupExtender 引用了相同的按钮(通过 TargetControlID),它控制 ascx 页面上的面板。
单击该按钮时,模式弹出窗口将打开,但永远不会触发Button_Click事件,因此模式不会获取其会话数据。
由于这两个页面是分开的,我无法从 aspx.cs 代码调用 ModalPopupExtender,我无法从 ascx.cs 代码访问复选框列表,并且我看不到填充我的会话变量然后以编程方式激活其他一些隐藏按钮或控件的方法,然后打开我的模式弹出窗口。
有什么想法吗?
答:
对不起,我很困惑。你不能直接调用 ascx,所以......
是您从同一页面中调用的模态代码,例如隐藏面板等;
或者是在单击事件上调用的另一个 aspx 页?
usercontrol(.ascx) 文件是一组控件,这些控件已组合在一起以提供一些可重用的功能。在页面生命周期期间,其中定义的控件仍会添加到页面的控件集合 (.aspx) 中。ModalPopupExtender 使用 javascript 和 dhtml 在 usercontrol 客户端中显示和隐藏控件。您看到的是 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();
评论