如何向复选框列表Asp.net上的每个项目添加一个事件

如何向复选框列表Asp.net上的每个项目添加一个事件,asp.net,.net,event-handling,Asp.net,.net,Event Handling,如何向复选框列表中的每个项目添加一个事件,例如我想添加一个单击事件来检查已选中的项目 提前感谢。复选框列表中的每个项目都属于System.Web.UI.WebControl.ListItem类型,并且没有定义任何事件。这对于复选框列表来说有点棘手。因为ListItem类没有任何事件,所以不要认为有直接的方法向每个项目添加click事件 您可以在复选框列表上设置AutoPostBack=“true”,并在页面加载时检查所选的项目,但您不知道最后单击的是哪个项目 另一种解决方案是去掉复选框列表,只创

如何向复选框列表中的每个项目添加一个事件,例如我想添加一个单击事件来检查已选中的项目


提前感谢。

复选框列表中的每个项目都属于
System.Web.UI.WebControl.ListItem类型,并且没有定义任何事件。

这对于复选框列表来说有点棘手。因为ListItem类没有任何事件,所以不要认为有直接的方法向每个项目添加click事件

您可以在复选框列表上设置
AutoPostBack=“true”
,并在页面加载时检查所选的项目,但您不知道最后单击的是哪个项目

另一种解决方案是去掉复选框列表,只创建复选框,并将这些复选框上的单击事件设置为相同的事件方法。在那里你可以查一下寄件人

ASPX:


或者,您可以创建自己的自定义复选框列表,用于处理项目上的单击事件。

确定。所以我找到了这个问题/答案,它对我没有帮助。虽然提供的答案是正确的,但有一种简单的方法可以使用Repeater控件构建类似CheckBoxList的控件

事实证明,您可以使用带有复选框的ItemTemplate的Repeater。 我在这里有一个完整的解释:

我还复制了此答案中所需的数据:

Default.aspx

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="CheckBoxListExample._Default" %>

<%@ Import Namespace="CheckBoxListExample" %>
<%@ Import Namespace="CheckBoxListExample.Models" %>

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
    <div>
        <asp:Repeater ID="Repeater1" runat="server">
            <ItemTemplate>
                <asp:CheckBox ID="cb1" runat="server" AutoPostBack="true" OnCheckedChanged="RepeaterCheckBoxChanged"
                    Text="<%# ((CheckBoxViewModel)Container.DataItem).Name %>"
                    Checked="<%# ((CheckBoxViewModel)Container.DataItem).IsChecked %>" />
            </ItemTemplate>
        </asp:Repeater>
    </div>
</asp:Content>

所以没有办法知道什么时候单击或选中了任何项目?@BlaShadow即使可能,每次选中/取消选中都需要往返服务器,这可能不太好。
void CheckBox_CheckedChanged(object sender, EventArgs e)
{
   Console.WriteLine(((CheckBox)sender).Text);
}
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="CheckBoxListExample._Default" %>

<%@ Import Namespace="CheckBoxListExample" %>
<%@ Import Namespace="CheckBoxListExample.Models" %>

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
    <div>
        <asp:Repeater ID="Repeater1" runat="server">
            <ItemTemplate>
                <asp:CheckBox ID="cb1" runat="server" AutoPostBack="true" OnCheckedChanged="RepeaterCheckBoxChanged"
                    Text="<%# ((CheckBoxViewModel)Container.DataItem).Name %>"
                    Checked="<%# ((CheckBoxViewModel)Container.DataItem).IsChecked %>" />
            </ItemTemplate>
        </asp:Repeater>
    </div>
</asp:Content>
using System;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.WebControls;
using CheckBoxListExample.Models;

namespace CheckBoxListExample
{
    public partial class _Default : Page
    {
        private List<CheckBoxViewModel> _ViewModels;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                var _ViewModels = new List<CheckBoxViewModel>
                {
                    new CheckBoxViewModel {Name = "Test1", IsChecked = true},
                    new CheckBoxViewModel {Name = "Test2"},
                    new CheckBoxViewModel {Name = "Test3"}
                };
                Repeater1.DataSource = _ViewModels;
                Repeater1.DataBind();
            }
        }

        protected void RepeaterCheckBoxChanged(object sender, EventArgs e)
        {
            var cb = sender as CheckBox;
            if (cb == null) return;
            if (cb.Checked)
            {
                // Insert
            }
            else
            {
                // Delete
            }
        }
    }
}
namespace CheckBoxListExample.Models
{
    public class CheckBoxViewModel
    {
        public string Name { get; set; }
        public bool IsChecked { get; set; }
    }
}