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

voix
33

J'ai un contrôle CheckBoxList que je veux demander à l'utilisateur de vérifier au moins une boîte, il n'a pas d'importance s'ils vérifient tous un seul, ou 3, ou même un seul.

Dans l'esprit des contrôles de validation de asp.net, que puis-je utiliser pour appliquer cela? J'utilise aussi l'extension de validation Ajax, donc ce serait bien si elle pourrait ressembler à d'autres contrôles, et non une méthode de validation du serveur ringard dans le behind.

<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>
Créé 18/07/2009 à 01:09
source utilisateur
Dans d'autres langues...                            


6 réponses

voix
0

Boucle à travers chacun des éléments de ckBoxListReasons. Chaque article sera de type « ListItem ».

Le ListItem aura une propriété appelée « Sélectionné » qui est un booléen. Il est vrai lorsque cet élément 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éfinie sur true si l'utilisateur a fait au moins une sélection. Vous pouvez ensuite utiliser pour définir l'état valide de tout contrôle de validateur particulier que vous aimez.

J'espère que cela t'aides!

Richard.

Créé 18/07/2009 à 02:17
source utilisateur

voix
59

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

JQuery peut le faire très facilement aussi longtemps que vous avez quelque chose que tous les contrôles de cases à cocher ont en commun d'utiliser comme sélecteur tels que la classe (CssClass sur votre commande .NET). Vous pouvez faire une simple JQuery fonction et le connecter à un validateur personnalisé ASP.NET. Rappelez -vous si vous allez la route validateur personnalisé pour vous assurer que vous le vérifier côté serveur et dans le cas où le javascript ne fonctionne pas, vous ne recevez pas un contrôle côté serveur libre 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 est tout simplement la fonction javascript pour itérer et regardez tous vos case à cocher contrôle beaucoup plus facile , mais vous pouvez simplement utiliser la vanille javascript si vous le souhaitez.

Voici un exemple que je trouve à: Lien à 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;
}

Side Note: JQuery est juste un petit fichier js comprend que vous devez ajouter à votre page. Une fois que vous l' avez compris , 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 je pense.

Créé 18/07/2009 à 02:33
source utilisateur

voix
3

Consultez cet article à partir de 4 Guys From Rolla:

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

Ils vous montrent comment créer un validateur pour les contrôles et CheckBoxList que CheckBox fonctionne exactement comme la RequiredFieldValidator pour les autres contrôles .NET. Il a la validation du côté serveur et la validation du côté client. La part belle à ce sujet est que vous pouvez spécifier un ValidationGroup et il travaillera avec le contrôle ValidationSummary.

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 à tout le dll et enregistrer les commandes et vous êtes bon pour aller.

Créé 18/07/2009 à 03:22
source utilisateur

voix
13

Voici un produit de nettoyage jQuery mise en œuvre qui permet à un ClientValidationFunction pour un certain nombre de CheckBoxList 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 balisage:

<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 pour 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);
    }
}
Créé 25/10/2010 à 15:59
source utilisateur

voix
1

Voici une autre solution qui peut être considéré par Dado.Validators 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érifiez si une case est cochée dans un groupe de cases à cocher clientside

Créé 16/08/2013 à 16:20
source utilisateur

voix
0

Vous pouvez utiliser une CustomValidatorpour cela 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 une 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>
Créé 31/03/2017 à 12:55
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more