6

チェックボックスのリストを使用して、次のリピーター コントロールを用意します。

<asp:Repeater ID="rptItemList" runat="server">
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
    <div>
        <asp:CheckBox ID="chkItem" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ItemName").ToString() %>' />
        <asp:HiddenField ID="hdItem" runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "ItemId").ToString() %>' />
    </div>
</ItemTemplate>
<FooterTemplate>
    <asp:LinkButton ID="lbtnDel" runat="server" Text="Delete" OnClick="lbtnDel_Click" OnClientClick="return confirm('Are you sure you want to delete selected items from this list?')"></asp:LinkButton>
</FooterTemplate>
</asp:Repeater>

lbtnDel_Click イベントを処理するバック コードは次のとおりです。

    protected void lbtnDel_Click(object sender, EventArgs e)
    {
        foreach (RepeaterItem ri in rptItemList.Items)
        {
            CheckBox chk = (CheckBox)ri.FindControl("chkItem");
            HiddenField hd = (HiddenField)ri.FindControl("hdItem");

            if (chk.Checked)
            {
                var tc = new ItemController();
                tc.DeleteItem(Convert.ToInt32(hd.Value));
            }
        }
        Response.Redirect(DotNetNuke.Common.Globals.NavigateURL());
    }

チェックボックスを選択して削除をクリックすると、コードはチェックボックスを見つけますが、チェックされていないものとして読み取るため、アイテムは削除されません。

何か案は?

4

2 に答える 2

10

100% 確実ではありませんが、ページの読み込みごとにデータ バインディングを行っていますか? !IsPostBack このような問題が発生した場合は、通常、ページの読み込みによってリピーターが再バインドされ、現在の状態がすべて破棄されたことが原因です。

于 2013-07-04T10:41:39.967 に答える