我有一个中继器控件,每个项目/行都有一个 asp:Checkbox 控件和旁边的按钮。
我的问题是,如果我选中一个给定的复选框并单击它旁边的按钮 [在回发之前],那么之前选中的复选框的状态(选中)将被保留 [在回发之后]。但我不希望它被保留,所以我对所有复选框做了以下操作:
- 禁用复选框(和中继器)的视图状态(EnableViewState='false')
- 定义属性 Checked="false"
<td> <asp:CheckBox ID="chk_chooseTOL" CssClass="chk_chooseTOL" runat="server" Checked="false" EnableViewState="false" /> </td>
我在调试模式下转发器的 ItemDataBound 事件期间从代码隐藏中查看了复选框的状态,这很好,没有选中任何复选框,但最后显示页面并且之前选中的复选框仍然存在检查。我不明白为什么。
你知道如何不保留我的复选框的状态吗?(我需要复选框成为服务器端控件,以便在特定条件下的 ItemDataBound 事件期间禁用它们)
谢谢
更多代码:
<asp:Repeater ID="rpt_CA" runat="server" DataSourceID="TLDataSource" EnableViewState="false" OnItemDataBound="rpt_CA_OnItemDataBound" ClientIDMode="Static" >
<HeaderTemplate>
<table class="ca_table persist-area" id="rpt_CA">
<thead>
<tr class="tl-header persist-header">
<th>Consultant</th>
<th>Mode</th>
<th></th>
</tr>
</thead>
<tbody>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Label runat="server" Text='<%# Eval("EMPLOYEES.FULLNAME") + " (" + Eval("ID_EMPLOYEE") + ")" %>' />
</td>
<td>
<asp:Button runat="server" Text="Gen" EnableViewState="false" />
</td>
<td>
<asp:CheckBox ID="chk_chooseTOL" CssClass="chk_chooseTOL" runat="server" Checked="false" EnableViewState="false" />
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</tbody>
</table>
</FooterTemplate>
</asp:Repeater>
.
protected void rpt_CA_OnItemDataBound(object Sender, RepeaterItemEventArgs Args) {
if (Args.Item.ItemType == ListItemType.Item || Args.Item.ItemType == ListItemType.AlternatingItem)
{ TURNOVER_LINES currentTL = (TURNOVER_LINES)Args.Item.DataItem; RepeaterItem ri = Args.Item;
CheckBox chk_chooseTOL = Args.Item.FindControl("chk_chooseTOL") as CheckBox;
if(currentTL.IS_ALREADY_GEN)
{
chk_chooseTOL.Enabled = false;
}
}
}