Comment valider un utilisateur a choisi au moins une case dans une CheckBoxList?

j'ai un contrôle de CheckBoxList que je veux exiger de l'utilisateur de cocher au moins une case, il n'a pas d'importance s'ils cochent chaque un, ou 3, ou même un seul.

dans l'esprit de asp.net les contrôles de validation de l', Que puis-je utiliser pour appliquer cela? J'utilise aussi L'extension de validation Ajax, donc ce serait bien si elle pouvait ressembler à d'autres contrôles, et pas à une méthode de validation de serveur cheesy dans le codebehind.

<asp:CheckBoxList RepeatDirection="Horizontal" RepeatLayout="Table" RepeatColumns="3" ID="ckBoxListReasons" runat="server">
    <asp:ListItem Text="Preliminary Construction" Value="prelim_construction" />
    <asp:ListItem Text="Final Construction" Value="final_construction" />
    <asp:ListItem Text="Construction Alteration" Value="construction_alteration" />
    <asp:ListItem Text="Remodel" Value="remodel" />
    <asp:ListItem Text="Color" Value="color" />
    <asp:ListItem Text="Brick" Value="brick" />
    <asp:ListItem Text="Exterior Lighting" Value="exterior_lighting" />
    <asp:ListItem Text="Deck/Patio/Flatwork" Value="deck_patio_flatwork" />
    <asp:ListItem Text="Fence/Screening" Value="fence_screening" />
    <asp:ListItem Text="Landscape - Front" Value="landscape_front" />
    <asp:ListItem Text="Landscape - Side/Rear" Value="landscape_side_rear" />
    <asp:ListItem Text="Other" Value="other" />
</asp:CheckBoxList>
34
demandé sur Eric Barr 2009-07-18 04:09:31

6 réponses

il est facile de faire cette validation côté serveur, mais je suppose que vous voulez le faire côté client?

JQuery peut le faire très facilement tant que vous avez quelque chose que tous les contrôles de case à cocher ont en commun à utiliser comme un sélecteur tel que class (CssClass sur votre contrôle .NET). Vous pouvez faire une fonction simple JQuery et la connecter à un ASP.NET validateur sur mesure. N'oubliez pas si vous allez le validateur personnalisé itinéraire assurez-vous de vérifier côté serveur it ainsi que dans le cas où javascript ne fonctionne pas, vous ne recevez pas une vérification côté serveur gratuite comme les autres validateurs .NET.

Pour plus d'informations sur les validateurs personnalisés consultez les liens suivants: www.asp.net et MSDN

vous n'avez pas besoin d'utiliser JQuery , il fait juste la fonction javascript pour itérer et regarder toutes vos commandes de case à cocher beaucoup plus facile, mais vous pouvez juste utiliser JavaScript vanille si vous voulez.

voici un exemple que j'ai trouvé à: lien vers l'original

<asp:CheckBoxList ID="chkModuleList"runat="server" >
</asp:CheckBoxList>

<asp:CustomValidator runat="server" ID="cvmodulelist"
  ClientValidationFunction="ValidateModuleList"
  ErrorMessage="Please Select Atleast one Module" ></asp:CustomValidator>

// javascript to add to your aspx page
function ValidateModuleList(source, args)
{
  var chkListModules= document.getElementById ('<%= chkModuleList.ClientID %>');
  var chkListinputs = chkListModules.getElementsByTagName("input");
  for (var i=0;i<chkListinputs .length;i++)
  {
    if (chkListinputs [i].checked)
    {
      args.IsValid = true;
      return;
    }
  }
  args.IsValid = false;
}

Note de Côté: JQuery est juste un peu de js fichiers, vous devez ajouter à votre page. Une fois que vous l'avez inclus, vous pouvez utiliser tous les JQuery que vous aimez. Rien à installer et il sera pleinement pris en charge dans la prochaine version de Visual Studio I penser.

60
répondu Kelsey 2009-07-18 02:26:10

Voici un nettoyeur de jQuery mise en œuvre qui permet à un ClientValidationFunction pour un certain nombre de CheckBoxList les contrôles sur une page:

function ValidateCheckBoxList(sender, args) {
    args.IsValid = false;

    $("#" + sender.id).parent().find("table[id$="+sender.ControlId+"]").find(":checkbox").each(function () {
        if ($(this).attr("checked")) {
        args.IsValid = true;
        return;
        }
    });
}

voici le markup:

<asp:CheckBoxList runat="server"
          Id="cblOptions" 
          DataTextField="Text" 
          DataValueField="Id" />

<xx:CustomValidator Display="Dynamic" 
              runat="server" 
              ID="cblOptionsValidator"
              ControlId="cblOptions"
              ClientValidationFunction="ValidateCheckBoxList" 
              ErrorMessage="One selection required." />

et enfin, le validateur personnalisé qui permet à la fonction client de récupérer le contrôle cible par ID:

public class CustomValidator : System.Web.UI.WebControls.CustomValidator
{
    public string ControlId { get; set; }

    protected override void OnLoad(EventArgs e)
    {
        if (Enabled)
            Page.ClientScript.RegisterExpandoAttribute(ClientID, "ControlId", ControlId);

        base.OnLoad(e);
    }
}
13
répondu Nariman 2010-10-25 14:59:29

regardez cet article de 4 gars de Rolla:

http://aspnet.4guysfromrolla.com/articles/092006-1.aspx

ils vous montrent comment créer un validateur pour les contrôles CheckBox et CheckBoxList qui fonctionne exactement comme le Requerdfieldvalidator pour les autres contrôles .NET. Il a la validation côté serveur et la validation côté client. La bonne partie à ce sujet est que vous pouvez spécifier un groupe de validation et il fonctionnera avec le contrôle de Validationsommaire.

il y a aussi un lien En bas de l'article pour télécharger la source et l'utiliser dans votre projet. Vous faites référence à la dll et enregistrez les contrôles et vous êtes bon pour aller.

3
répondu Austin 2009-07-18 02:22:20

Voici une autre solution qui peut être considérée via Dado.Validateurs sur GitHub.

<asp:CheckBoxList ID="cblCheckBoxList" runat="server">
    <asp:ListItem Text="Check Box (empty)" Value="" />
    <asp:ListItem Text="Check Box 1" Value="1" />
    <asp:ListItem Text="Check Box 2" Value="2" />
    <asp:ListItem Text="Check Box 3" Value="3" />
</asp:CheckBoxList>

<Dado:RequiredFieldValidator runat="server" ControlToValidate="cblCheckBoxList" ValidationGroup="vlgSubmit" />

exemple codebehind.aspx.cs

btnSubmit.Click += (a, b) =>
{
    Page.Validate("vlgSubmit");
    if (Page.IsValid) {
        // Validation Successful
    }
};

https://www.nuget.org/packages/Dado.Validators /

Ref: Vérifier si une case est cochée dans un groupe de cases à cocher à côté client

1
répondu roydukkey 2017-05-23 12:34:17

boucle à travers chacun des éléments de ckBoxListReasons. Chaque élément sera de type "ListItem".

le ListItem aura une propriété appelée 'Selected' qui est un booléen. C'est vrai quand cet article est sélectionné. Quelque chose comme:

Dim bolSelectionMade As Boolean = False
For Each item As ListItem in ckBoxListReasons.Items
 If item.Selected = True Then
  bolSelectionMade = True
 End If
Next

bolSelectionMade sera défini à true si l'Utilisateur a fait au moins une sélection. Vous pouvez ensuite l'utiliser pour définir l'état Valide d'un contrôle de validateur vous le souhaitez.

Espérons que cette aide!

Richard.

0
répondu Richard 2009-07-18 01:17:05

Vous pouvez utiliser un CustomValidator pour que, avec un peu de javascript.

<asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="Select at least one"
    ClientValidationFunction="checkCheckBoxList"></asp:CustomValidator>

<script type="text/javascript">
    function checkCheckBoxList(oSrc, args) {
        var isValid = false;
        $("#<%= CheckBoxList1.ClientID %> input[type='checkbox']:checked").each(function (i, obj) {
            isValid = true;
        });
        args.IsValid = isValid;
    }
</script>

et pour un RadioButtonList

<asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="Select at least one" ClientValidationFunction="checkRadioButtonList"></asp:CustomValidator>

<script type="text/javascript">
    function checkRadioButtonList(oSrc, args) {
        if ($("input[name='<%= RadioButtonList1.UniqueID %>']:checked").val() == null) {
            args.IsValid = false;
        } else {
            args.IsValid = true;
        }
    }
</script>
0
répondu VDWWD 2017-03-31 12:55:02