【问题标题】:asp repeater Checkbox state preservedasp中继器复选框状态保留
【发布时间】:2012-12-05 10:45:56
【问题描述】:

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

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

  1. 禁用复选框(和中继器)的视图状态 (EnableViewState='false')
  2. 定义属性 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;
             }

    }
}

【问题讨论】:

  • 您是否尝试过EnableViewState="False" 在转发器级别?
  • 是的,中继器有属性EnableViewState="False",谢谢
  • 如果有的话,能不能多贴一些asp代码和后面的代码?
  • 也许这可以更好地启发你Repeaters and Lost Data After Postback (Viewstate)
  • 您是否在 'if(!IsPostBack) { }` 中绑定数据?

标签: c# asp.net checkbox repeater


【解决方案1】:

把 Checked="false" 丢掉状态是不够的。该值将被表单中的选中状态覆盖。为防止这种情况发生,您需要在代码隐藏中、page_load 事件中或之后设置 checked=false。

【讨论】:

  • 好的,这就是我所做的(使用 JS 而不是代码隐藏)。谢谢。
猜你喜欢
  • 2022-01-17
  • 1970-01-01
  • 2020-06-11
  • 2016-10-13
  • 1970-01-01
  • 2017-02-27
  • 1970-01-01
  • 1970-01-01
  • 2016-12-21
相关资源
最近更新 更多