ASPX和ASCX之间的事件

时间:2012-05-03 07:50:59

标签: asp.net .net events ascx

我是.NET的初学者,从昨天早上开始搜索以解决我的问题而没有找到解决方案。

这是我的问题:

我通过这种方式动态创建一些用户控件,因为我需要提供参数:

List<ANNOUNCEMENT> listAnnouncement = getAnnoucements();
foreach(ANNOUNCEMENT ann in listAnnouncement)
{
    if(ann.IS_CURRENT_ANNOUNCEMENT && currentAnnouncement == null)
    {
         currentAnnouncement = ann;
    }
    List<Object> listParams = new List<Object>();
    listParams.Add(ann);
    AnnouncementPresentation ap = (AnnouncementPresentation)(Controller.LoadControl(Page, "~/UserControls/AnnouncementPresentation.ascx", listParams.ToArray()));
    /* important for the end of the method */
    ap.modifyAnnouncementButtonClick += new EventHandler(modifyAnnouncementButtonClick);
    pnl_announcements.Controls.Add(ap);
}

在这个ASCX中,我有一个按钮,当用户点击它时,我想调用我的ASPX中包含的方法,所以我在ASCX中这样做:

public event EventHandler modifyAnnouncementButtonClick;
protected void btn_modify_announcement_Click(object sender, EventArgs e)
{
    PageAdminAnnonces.currentAnnouncement = annonce;
    modifyAnnouncementButtonClick(sender, e);
}

这在ASPX中:

protected void modifyAnnouncementButtonClick(object sender, EventArgs e)
{
     initListOfAnnouncement();
     lbl_errors.Text = currentAnnouncement.TITLE;
}

我认为一切正常,但有问题:它只运行一次,在方法结束时,我会删除我的ASCX,并创建新的ASCX。但他们没有这些方法,当我再次点击时,没有任何作用,所以重新加载ASPX。重新加载后,它再次起作用。

我做错了吗?

1 个答案:

答案 0 :(得分:1)

根据评论中的信息,我认为您的解决方案不起作用,因为您正在重新创建Click事件处理方法中的控件,该方法在页面的生命周期中很晚,不应该用于添加控件。

正如评论中所述,我建议您在Page_InitPage_Load中创建控件,在按钮的Click处理方法中重新创建控件。您还应为每个ID分配唯一的ID。然后,在Click处理程序中,您可以使用FindControl方法访问创建的控件。或者,您可以在创建时保存对控件的引用,以便以后轻松访问它们。

有用的链接: