从后面的代码添加CheckBox CheckedChanged事件

时间:2016-04-20 08:06:29

标签: c# asp.net events checkbox

我从我的代码后面添加了几个复选框,但是我无法触发CheckedChanged事件。

在页面加载时调用此代码:

CheckBox cb = new CheckBox();
cb.AutoPostBack = true;
cb.CheckedChanged += cb_CheckedChanged;

cb.ToolTip = dr["Id"].ToString();
cb.ID = Guid.NewGuid().ToString();

Label lbl = new Label();
lbl.Text = dr["Id"].ToString();
lbl.AssociatedControlID = cb.ID;

dvCheckboxes.Controls.Add(cb);
dvCheckboxes.Controls.Add(lbl);
dvCheckboxes.Controls.Add(new LiteralControl("<br />"));

事件:

void cb_CheckedChanged(object sender, EventArgs e)
{
    System.Diagnostics.Debug.Write(((CheckBox)sender).ToolTip);
}

我在CheckedChanged事件中放了一个断点,但它从未到达。

我尝试了什么:

  • 将代码放入if(!IsPostBack),但没有区别。
  • cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
  • cb.CheckedChanged += new EventHandler(this.cb_CheckedChanged);
  • cb.ViewStateMode = System.Web.UI.ViewStateMode.Enabled;
  • 尝试将代码放入Page_Init而不是Page_Load

2 个答案:

答案 0 :(得分:6)

@johan,试一试。在PageInit中创建复选框而不是Pageload。还为Checkbox提供适当的ID。

        protected void Page_Load(object sender, EventArgs e)
        {

        }
        protected void Page_init(object sender, EventArgs e)
        {
            CheckBox cb = new CheckBox();
            cb.AutoPostBack = true;
            cb.CheckedChanged +=cb_CheckedChanged;
            cb.CausesValidation = false;
            cb.ToolTip = "Hello";
            cb.ID = "chk_test";

            Label lbl = new Label();
            lbl.Text = "test";
            lbl.AssociatedControlID = cb.ID;

            dvCheckboxes.Controls.Add(cb);
            dvCheckboxes.Controls.Add(lbl);
            dvCheckboxes.Controls.Add(new LiteralControl("<br />"));
        }
        protected void cb_CheckedChanged(object sender, EventArgs e)
        {

            System.Diagnostics.Debug.Write(((CheckBox)sender).ToolTip);
        }

答案 1 :(得分:0)

在您的网站代码中添加事件 - 而不是代码隐藏:

<asp:CheckBox ID="cb" Runat="server" CheckedChanged="cb_CheckedChanged" />

希望这有帮助。