如何允许最大复选框签入 asp.net c# 中的复选框列表

How to allow maximum check box to check in a checkboxlist in asp.net c#

我有一个复选框列表,其中有一些 items.I 想要指定最大复选框以允许检查 我们如何使用 C# 代码执行此操作。

这是我的代码

<asp:CheckBoxList ID="chkLstFields" runat="server" AutoPostBack="true">

                                            </asp:CheckBoxList>


int br_id = Convert.ToInt32(ddlBrand.SelectedValue);
        int status = Convert.ToInt32(ddlStatus.SelectedIndex.ToString());
        DataTable dt_Spec = bl.sp_select_model_spec_field(br_id, status);
        chkLstFields.Items.Clear();

        if (dt_Spec.Rows.Count > 0)
        {
            for (int i = 0; dt_Spec.Rows.Count > i; i++)
            {
                chkLstFields.Items.Add(dt_Spec.Rows[i].ItemArray[0].ToString());

            }
        }

如果要限制勾选的物品数量,可以这样限制勾选的物品数量:

if(chkLstFields.Items.OfType<ListItem>().Count(x => x.Selected) > 2)
{

  // show message you cannot select more than 2 items
}
else
{
 // continue execution
}

您可以为此使用 CustomValidator。我在一个旧的 VB.NET 项目中实现了它。

这里是相关的aspx:

<asp:ListBox ID="LbSymptomCodesInsert" runat="server" 
    CausesValidation="true" 
    ValidationGroup="VG_RMA_SAVE" SelectionMode="Multiple"> 
</asp:ListBox>
<asp:CustomValidator ID="CV_SymptomCodeSelectionCount" runat="server" 
    ValidateEmptyText="true" 
    ClientValidationFunction="validateSymptomCodeSelectionCount" 
    OnServerValidate="validateSymptomCodeSelectionCount" 
    ControlToValidate="LbSymptomCodesInsert" 
    Display="None" 
    EnableClientScript="true" 
    ErrorMessage="Select at least one and at most 5 SymptomCodes" 
    Style="visibility: hidden" 
    ValidationGroup="VG_RMA_SAVE">*</asp:CustomValidator>

以下是 javascript 函数:

function validateSymptomCodeSelectionCount(sender, args){
    var listbox = document.getElementById('LbSymptomCodesInsert');
    args.IsValid = validateListBoxSelectionCount(listbox, 1, 5);
}

function validateListBoxSelectionCount(listbox, minSelected, maxSelected){
    var selected=0;
    if(listbox != null){
        for (var i=0; i<listbox.length; i++){
            if(listbox.options[i].selected){
               selected++; 
               if(selected>maxSelected)break;
            }
        }
    }
   return (selected >= minSelected && selected <= maxSelected);
} 

这是 ServerValidate(VB.NET 但我相信你明白了):

Protected Sub validateSymptomCodeSelectionCount(ByVal source As Object, ByVal args As ServerValidateEventArgs)
    Dim count = 0
    For Each item As ListItem In LbSymptomCodesInsert.Items
        If item.Selected Then count += 1
        If count > 5 Then Exit For
    Next
    args.IsValid = (count >= 1 AndAlso count <= 5)
End Sub