Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从页脚调用命令时获取重复项复选框值_C#_Asp.net_Repeater - Fatal编程技术网

C# 从页脚调用命令时获取重复项复选框值

C# 从页脚调用命令时获取重复项复选框值,c#,asp.net,repeater,C#,Asp.net,Repeater,具有以下带有复选框列表的中继器控件: <asp:Repeater ID="rptItemList" runat="server"> <HeaderTemplate> </HeaderTemplate> <ItemTemplate> <div> <asp:CheckBox ID="chkItem" runat="server" Text='<%# DataBinder.Eval(Container.Da

具有以下带有复选框列表的中继器控件:

<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>
当我选中一个复选框并单击delete时,代码会找到该复选框,但会将其读取为未选中,因此不会删除该项


有什么想法吗?

不是100%确定,但您是否在每次加载页面时都进行数据绑定?仅在
上尝试绑定!iPostBack

每当我遇到这样的问题时,通常是因为页面加载导致中继器重新绑定并终止所有当前状态

我在更新面板中有一个中继器。所以RepeaterItem中唯一的控件是DataBoundLiteralControl

这对我很有用:

foreach (RepeaterItem item in rpLists.Items)
                {

                    if (item.Controls.Count > 0)
                    {
                        DataBoundLiteralControl dbLt = item.Controls[0] as DataBoundLiteralControl;
                        if (dbLt != null)
                        {
                            var controlCollection = this.ParseControl(dbLt.Text);
                            HtmlInputCheckBox cbInclude = (HtmlInputCheckBox) FindControl(controlCollection, "cbIncludeList");
                            if (cbInclude != null)
                            {
                                if (cbInclude.Checked)
                                {
                                    //your code here 
                                }
                            }
                        }
                    }
                }
我必须为FindControl创建一个递归方法,如果FindControl不是页面的一部分,那么它就不能工作。耸肩 看这里


哈哈,学童的错误。是的,数据绑定正在页面加载中执行,并终止状态。感谢+1的精彩。我没有想到在中继器中使用隐藏字段来存储值。如果我能投更多的票,我会的。
foreach (RepeaterItem item in rpLists.Items)
                {

                    if (item.Controls.Count > 0)
                    {
                        DataBoundLiteralControl dbLt = item.Controls[0] as DataBoundLiteralControl;
                        if (dbLt != null)
                        {
                            var controlCollection = this.ParseControl(dbLt.Text);
                            HtmlInputCheckBox cbInclude = (HtmlInputCheckBox) FindControl(controlCollection, "cbIncludeList");
                            if (cbInclude != null)
                            {
                                if (cbInclude.Checked)
                                {
                                    //your code here 
                                }
                            }
                        }
                    }
                }
private Control FindControl(Control parent, string id)
        {
            if (parent.ID == id)
                return parent;

            if (parent.HasControls())
            {
                foreach (Control childControl in parent.Controls)
                {

                    if (childControl.ID == id)
                        return childControl;

                    if (childControl.HasControls())
                        return FindControl(childControl, id);
                }

            }

            return null;
        }