2

リピーター コントロールがあり、各項目/行には 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;
             }

    }
}
4

1 に答える 1

1

状態を失うには、Checked="false"を入力するだけでは不十分です。この値は、フォームのチェック済み状態で上書きされます。これを防ぐには、コードビハインド、page_loadイベント、またはその後に、checked=falseを設定する必要があります。

于 2012-12-24T07:36:13.250 に答える