C# OnCheckedChanged事件不存在';选中asp:checkbox中的复选框时不会激发

C# OnCheckedChanged事件不存在';选中asp:checkbox中的复选框时不会激发,c#,asp.net,checkbox,repeater,C#,Asp.net,Checkbox,Repeater,在我的工作中有一个嵌套的中继器。我负责在每个下转发器项目上添加asp:checkbox,以便我们可以通过复选框控制每个项目 标记代码为: <ItemTemplate> <li class="<%# GetCategoryClass(Container.DataItem) %> cl-li"> <asp:CheckBox runat="server" ID="checkBox" AutoPostBack="true" OnChecked

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

标记代码为:

<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>
我开始解决这个问题,发现CheckedChanged函数不是通过调试激发的。但是,当我在中添加一行时

if(IsPostBack){
   CheckedChanged(sender, e);  //add
}
当我调试时,它工作并进入CheckedChanged函数。
我读过很多文章,没有一篇说我需要在IsPostBack块中添加这一行。有人能告诉我这个原理吗?

你的代码应该可以工作。这取决于你是怎么写的

我举了一个有效的例子:

默认值。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>
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>");
}

Default.aspx.cs

<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>
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>");
}
受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!Page.IsPostBack)
{
RepeaterCB.DataSource=新列表{“tom”、“fred”、“pijule”};
RepeaterCB.DataBind();
}
}
受保护的void OnCheckedChange(对象发送方,事件参数e)
{
回答。写下(“警报(‘火灾’);”);
}
这段代码在我每次选中或取消选中文本框时都会触发一个警报


希望有帮助。

您的代码应该可以工作。这取决于你是怎么写的

我举了一个有效的例子:

默认值。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>
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>");
}

Default.aspx.cs

<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>
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>");
}
受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!Page.IsPostBack)
{
RepeaterCB.DataSource=新列表{“tom”、“fred”、“pijule”};
RepeaterCB.DataBind();
}
}
受保护的void OnCheckedChange(对象发送方,事件参数e)
{
回答。写下(“警报(‘火灾’);”);
}
这段代码在我每次选中或取消选中文本框时都会触发一个警报


希望有帮助。

您说您正在“添加”每个repeater项的asp:checkbox。这是否意味着您正在以编程方式执行此操作?这是怎么发生的。您在此处显示的标记是如何添加到repeater项的?或者它已经存在于项目模板中?@GiliusMaximus我更改了标记代码,只添加了一个复选框控件。我想我找到了一个解决方法,但感谢所有关注此问题的人。解决方案:看起来很适合我。你说你正在“添加”asp:复选框到每个转发器项目。这是否意味着您正在以编程方式执行此操作?这是怎么发生的。您在此处显示的标记是如何添加到repeater项的?或者它已经存在于项目模板中?@GiliusMaximus我更改了标记代码,只添加了一个复选框控件。我想我找到了一个解决方法,但感谢所有关注此问题的人。解决方法:看起来很适合我。谢谢you@dramixx,我认为我的代码应该可以工作,但除非我添加那一行,否则它不会工作。可能页面加载函数中的某些内容是关键。无论如何,谢谢你。没问题,为你高兴。您现在可以接受答案,注意它已解决。谢谢you@dramixx,我认为我的代码应该可以工作,但除非我添加那一行,否则它不会工作。可能页面加载函数中的某些内容是关键。无论如何,谢谢你。没问题,为你高兴。您现在可以接受答案,以注意它已解决。