asp转发器Checkbox状态保留

时间:2012-12-05 10:45:56

标签: c# asp.net checkbox repeater

我有一个转发器控件,每个项目/行都有一个asp:Checkbox控件和旁边的按钮。

我的问题是,如果我检查一个给定的复选框并点击它旁边的按钮[回发前],状态(已选中) 之前检查的复选框保留[在回发后]。但我不希望它被保留,所以我已经为所有复选框完成了以下操作:

  1. 禁用Checkboxes(和转发器)的viewstate(EnableViewState ='false')
  2. 定义属性Checked =“false”
  3. <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;
                 }
    
        }
    }
    

1 个答案:

答案 0 :(得分:1)

将Checked =“false”置于失去状态是不够的。该值将被表单中的已检查状态覆盖。为了防止这种情况,您需要在代码隐藏,page_load事件或之后设置checked = false。