我有一个转发器控件,每个项目/行都有一个asp:Checkbox控件和旁边的按钮。
我的问题是,如果我检查一个给定的复选框并点击它旁边的按钮[回发前],状态(已选中) 之前检查的复选框保留[在回发后]。但我不希望它被保留,所以我已经为所有复选框完成了以下操作:
<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;
}
}
}
答案 0 :(得分:1)
将Checked =“false”置于失去状态是不够的。该值将被表单中的已检查状态覆盖。为了防止这种情况,您需要在代码隐藏,page_load事件或之后设置checked = false。