C# OnCheckedChanged事件不存在';选中asp:checkbox中的复选框时不会激发
在我的工作中有一个嵌套的中继器。我负责在每个下转发器项目上添加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
<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,我认为我的代码应该可以工作,但除非我添加那一行,否则它不会工作。可能页面加载函数中的某些内容是关键。无论如何,谢谢你。没问题,为你高兴。您现在可以接受答案,以注意它已解决。