检查asp:复选框中的复选框时,OnCheckedChanged事件不会触发

时间:2015-08-11 15:30:07

标签: c# asp.net checkbox repeater

我的作品中有一个嵌套转发器。我有责任在每个转发器项目下面添加asp:复选框,以便我们可以通过复选框控制每个项目。

标记代码为:

<ItemTemplate>
  <li class="<%# GetCategoryClass(Container.DataItem) %> cl-li">    
    <asp:CheckBox runat="server" ID="checkBox" AutoPostBack="true" OnCheckedChanged="CheckedChanged" />
    <a class="cl-a excludeLink" visible='<%# GetCategoryClass(Container.DataItem) == "DISPLAYED" %>' href="<%# GetExcludeCategoryCommand(Container.DataItem) %>" runat="server" id="butExclude">x</a>
    <a class="cl-a" href="<%# GetCategoryCommand(Container.DataItem) %>" runat="server" id="butCategory"><%# GetCategoryTitle(Container.DataItem, true) %></a>
  </li>
</ItemTemplate>

c#代码是:

protected void CheckedChanged(object obj, EventArgs e)
{
    // some works    
}

我开始研究这个问题并发现CheckedChanged函数没有通过调试触发。但是,当我在

中添加一行时
if(IsPostBack){
   CheckedChanged(sender, e);  //add
}

它在我调试时工作并进入CheckedChanged函数。 我读了很多文章,没有人说我需要在IsPostBack块中添加该行。有没有人能告诉我原理?

1 个答案:

答案 0 :(得分:4)

您的代码应该有效。这取决于你如何写它。

我做了一个有效的例子:

Default.aspx

<table>
<asp:Repeater ID="RepeaterCB" runat="server">
<ItemTemplate>
     <tr>
         <td><%# Container.DataItem %></td>
         <td><asp:CheckBox runat="server" OnCheckedChanged="OnCheckedChange" AutoPostBack="true"/></td>
      </tr>
</ItemTemplate>
</asp:Repeater>
</table>

Default.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        RepeaterCB.DataSource = new List<string> { "tom", "fred", "pijule" };
        RepeaterCB.DataBind();
    }

}

protected void OnCheckedChange(object sender, EventArgs e)
{
    Response.Write("<script>alert('Fire');</script>");
}

每次检查或取消选中文本框时,此代码都会触发警报。

希望它有所帮助。