我是.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。重新加载后,它再次起作用。
我做错了吗?
答案 0 :(得分:1)
根据评论中的信息,我认为您的解决方案不起作用,因为您正在重新创建Click
事件处理方法中的控件,该方法在页面的生命周期中很晚,不应该用于添加控件。
正如评论中所述,我建议您在Page_Init
或Page_Load
中创建控件,不在按钮的Click
处理方法中重新创建控件。您还应为每个ID分配唯一的ID。然后,在Click
处理程序中,您可以使用FindControl
方法访问创建的控件。或者,您可以在创建时保存对控件的引用,以便以后轻松访问它们。
有用的链接: