我有一个包含CheckBox和TextBox的UserControl:
<asp:CheckBox runat="server" ID="chk1" />
<asp:TextBox runat="server" ID="tb1" />
在Page_Load上我将其中几个动态地添加到页面上的Panel中:
//loop through the results from DB
foreach (Thing t in Things)
{
//get the user control
MyUserControl c1 = (MyUserControl )Page.LoadControl("~/UserControls/MyUserControl.ascx");
//set IDs using public properties
c1.ID = "uc" + t.ID;
c1.CheckBoxID = "chk" + t.ID;
cl.TextBoxID = "tb" + t.ID;
//add it to the panel
myPanel.Controls.Add(c1);
//add the event handler to the checkbox
((CheckBox)myPanel.FindControl(c1.ID).FindControl(c1.CheckBoxID)).CheckedChanged += new EventHandler(CheckBox_CheckedChanged);
}
然后我在同一页面中为事件处理程序创建了方法:
protected void CheckBox_CheckedChanged(object sender, EventArgs e)
{
string test = "breakpoint here";
}
当我在CheckBox_CheckedChanged中放置一个断点时,单击我的复选框时它永远不会被击中。
当我查看视图源时,这是生成的代码:
<input id="ctl00_body_uc1_chk1" type="checkbox" name="ctl00$body$uc1$chk1" checked="checked" />
因此,当我添加事件处理程序时,它似乎没有被提升。这很奇怪,因为它会收集其他所有东西。
我错过了什么吗?
答案 0 :(得分:2)
添加CheckBox.AutoPostBack属性并将其设置为“true”。
CheckBox cb = ((CheckBox)myPanel.FindControl(c1.ID).FindControl(c1.CheckBoxID));
if(cb != null)
{
cb.AutoPostBack = true;
}
答案 1 :(得分:1)
“当我在CheckBox_CheckedChanged中放置一个断点时,点击我的复选框后它就永远不会被击中。”
如果要在单击复选框时触发事件,则还需要在复选框中设置AutoPostBack = true。如果您将光标放在文本框中并按返回(导致回发),事件是否会触发?