2013-03-06 17 views
6

Ho una checkboxlist e vorrei verificare se almeno una casella di controllo è selezionata. Se nessuno è selezionato, voglio mostrare un messaggio di avviso che dice di selezionare almeno un elemento. Voglio farlo in codice, se possibile. Ho iniziato ma non so se è giusto o sbagliato ma non riesco a finirlo.Verificare se è selezionata almeno una casella di controllo

public void alert() 
    { 
     foreach (ListItem listItem in cblCustomerList.Items) 
     { 
      if (!listItem.Selected) 
      { 
      } 
     } 
    } 

Ecco l'CheckBoxList in aspx:

<asp:CheckBoxList ID="cblCustomerList" runat="server" DataSourceID="SqlDataSource1" CssClass="CheckBoxList" 
      DataTextField="GroupName" DataValueField="GroupName" 
       onclick="readCheckBoxList()" >    
      </asp:CheckBoxList> 

qui è il pulsante:

<asp:Button ID="Button1" runat="server" CausesValidation="True" 
          CommandName="Insert" Text="Insert" OnClientClick="return Validate_Checkbox()" /> 

Grazie per il vostro aiuto.

+1

dovrebbero essere in JS, piuttosto che nel codice dietro –

+0

E 'meglio fare questo tipo di controllo sul lato client utilizzando JavaScript.Qui non c'è nulla che dipenda dai dati dal server – codingbiz

+0

@ both È davvero banale ignorare la validazione lato client. È perfettamente ragionevole volere il codice dietro la convalida. – BinaryTox1n

risposta

6

Modifica:

Ecco un esempio di codice. il suo lavoro per me

necessario aggiungere questo file di script: <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
    <script type="text/javascript"> 
     function Validate_Checkbox() { 
      var chks = $("#<%= cblCustomerList.ClientID %> input:checkbox");   

      var hasChecked = false; 
      for (var i = 0; i < chks.length; i++) { 
       if (chks[i].checked) { 
        hasChecked = true; 
        break; 
       } 
      } 
      if (hasChecked == false) { 
       alert("Please select at least one checkbox..!"); 

       return false; 
      } 

      return true; 
     }  
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:CheckBoxList ID="cblCustomerList" runat="server" CssClass="CheckBoxList"> 
      <asp:ListItem Value="0">xx</asp:ListItem> 
      <asp:ListItem Value="1">yy</asp:ListItem> 
     </asp:CheckBoxList> 
     <asp:Button ID="xx" runat="server" OnClientClick="javascript:Validate_Checkbox();return true;" /> 
    </div> 
    </form> 
</body> 
</html> 

e controllo delle modifiche

<asp:CheckBoxList ID="cblCustomerList" runat="server" DataSourceID="SqlDataSource1" CssClass="CheckBoxList" DataTextField="GroupName" DataValueField="GroupName">    
      </asp:CheckBoxList> 

invece del mio codice di esempio. e chiama lo javascript function nel pulsante control.look il mio codice di esempio.

Chears !!!

Modifica

si prega di aggiungere questo file di script

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 

Invece di <script src="scripts/jquery-1.8.3.min.js" type="text/javascript"></script>

+0

prettando il tuo codice js ... – naveen

+0

il mio ID di controllo si chiama cblCustomerList dove stai chiamando in javascript? ecco la mia checkbox in aspx: user1858332

+0

Ho un nuovo codice modificato sopra. Si prega di controllare il nuovo codice. funziona –

3
// using System.Linq; 

// Considering that items are of ListItem type, otherwise use Cast<ListItem>() 
if (!cblCustomerList.Items.Any(i => i.Selected)) 
{ 
    // TODO: Warn an user 
} 
9
if(cblCustomerList.Items.Cast<ListItem>().Any(item => item.Selected)) 
{ 
    // at least one selected 
} 
4

Prova questo;

boolean b = cblCustomerList.Items.Cast<ListItem>().Any(i => i.Selected) 

se b è true, almeno uno è selezionato nel vostro CheckBoxList.

Non dimenticare di utilizzare lo spazio dei nomi System.Linq.

0

Il modo più semplice che posso pensare ....

public void alert() 
     { 
      int i=0; 
      foreach (ListItem listItem in cblCustomerList.Items) 
      { 
       if (listItem.Selected) 
       { 
        i++; 
       } 
      } 
      if(i !=0) 
      { 
       Response.Write("Please check at least one option"); 
      } 
     } 
    } 
1
 if(! cblCustomerList.Items.Cast<ListItem>().AsParallel().Any(i => i.Selected)) 
     { 
      ShowAlert("Please select at least one option"); 
     } 
+0

@naveen, Grazie per il punto. Ho cambiato la logica. –

1

soluzione jQuery.

if (!$(".CheckBoxList").find("input:checked").length) { 
    alert("Houston, we've had a problem!"); 
} 
Problemi correlati