选中 asp:checkbox 中的复选框时不会触发 OnCheckedChanged 事件
OnCheckedChanged event doesn't fire when check the checkbox in asp:checkbox
我的作品中有一个嵌套转发器。我负责在中继器下方的每个项目上添加 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>
C#代码是:
protected void CheckedChanged(object obj, EventArgs e)
{
// some works
}
我开始着手解决这个问题,发现 CheckedChanged 函数没有通过调试触发。但是,当我在
中添加一行时
if(IsPostBack){
CheckedChanged(sender, e); //add
}
它在我调试时工作并进入 CheckedChanged 函数。
我读过很多文章,其中 none 说我需要在 IsPostBack 块中添加该行。有谁能告诉我它的原理吗?
您的代码应该可以工作。那要看你怎么写了。
我做了一个有效的例子:
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>");
}
每当我选中或取消选中文本框时,此代码都会触发警报。
希望对您有所帮助。
我的作品中有一个嵌套转发器。我负责在中继器下方的每个项目上添加 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>
C#代码是:
protected void CheckedChanged(object obj, EventArgs e)
{
// some works
}
我开始着手解决这个问题,发现 CheckedChanged 函数没有通过调试触发。但是,当我在
中添加一行时if(IsPostBack){
CheckedChanged(sender, e); //add
}
它在我调试时工作并进入 CheckedChanged 函数。 我读过很多文章,其中 none 说我需要在 IsPostBack 块中添加该行。有谁能告诉我它的原理吗?
您的代码应该可以工作。那要看你怎么写了。
我做了一个有效的例子:
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>");
}
每当我选中或取消选中文本框时,此代码都会触发警报。
希望对您有所帮助。