首页 > 解决方案 > 单击动态创建的按钮时无法进入事件

问题描述

我正在尝试制作程序,单击按钮,输入事件但我不能,有人可以帮助我吗?

“foreach”正在工作,但它没有进入,我不知道为什么。

单击按钮时,它不会启动事件,但是当它被单击两次时,所有按钮都会消失

foreach (var Cat in db.Categorias) {
    var id_Categoria = db.Categorias.Where(x => x.IdCategoria.Equals(Cat.IdCategoria)).FirstOrDefault();
    if (id_Categoria != null && Cat.IdCategoria.Equals(Cat.IdCategoria)) {
        UpdatePanel UP_btn_Cat = new UpdatePanel();
        UP_btn_Cat.ID = "UP_btn_Cat_" + Cat.IdCategoria.ToString();
        UP_btn_Cat.UpdateMode = UpdatePanelUpdateMode.Conditional;
        Plh_cat.Controls.Add(UP_btn_Cat);

        Button btn_cat = new Button();
        btn_cat.Text = Cat.NomeCategoria;
        btn_cat.ID = "btn_cat_" + Cat.IdCategoria.ToString();
        btn_cat.Click += new EventHandler(button_Click);
        UP_btn_Cat.ContentTemplateContainer.Controls.Add(btn_cat);

        AsyncPostBackTrigger trigger = new AsyncPostBackTrigger();
        trigger.ControlID = btn_cat.ID;
        trigger.EventName = "button_Click";
        UP_btn_Cat.Triggers.Add(trigger);

        Plh_email.Controls.Add(new LiteralControl("<div style='clear: both'></div>"));
    }
}

protected void button_Click(object sender, EventArgs e) {
    Button btn_cat = (Button)sender;

    PlaceHolder plh_msg_cat = new PlaceHolder();
    plh_msg_cat.ID = "plh_msg_cat";

    UpdatePanel UP_mgs_Cat = new UpdatePanel();
    UP_mgs_Cat.ID = "UP_mgs_Cat";
    UP_mgs_Cat.UpdateMode = UpdatePanelUpdateMode.Conditional;
    div_msgs.Controls.Add(UP_mgs_Cat);

    AsyncPostBackTrigger trigger = new AsyncPostBackTrigger();
    trigger.ControlID = btn_cat.ID;
    trigger.EventName = "Click";
    UP_mgs_Cat.Triggers.Add(trigger);

    var id = btn_cat.ID;
    Plh_cat.Controls.Add(new LiteralControl("<p class='p_cliente'>123" + id + "</p>"));
}

标签: c#htmlasp.neteventsforeach

解决方案


我不确定一切是如何创建的,但我建议您阅读Page Life Cycle。它指出必须在 PreInit 事件期间创建所有控件。使用 Init 初始化控件属性。

如果控件在 !IsPostBack 期间或在错误事件中仅创建一次,则不会触发按钮的 Click 事件。


推荐阅读