3

我是 .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。重新加载后,它再次工作。

我做错了什么吗?

4

1 回答 1

1

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

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

有用的链接:

于 2012-05-03T11:12:41.647 回答