Come per convalidare un utente ha scelto almeno una casella di controllo in una CheckBoxList?

voti
33

Ho un controllo CheckBoxList che voglio richiedere all'utente di controllare almeno una scatola, non importa se essi controllare ogni singolo, o 3, o anche solo uno.

Nello spirito di controlli di convalida di ASP.NET, cosa posso usare per far rispettare questo? Sto anche utilizzando la convalida extender Ajax, quindi sarebbe bello se potesse apparire come altri controlli, e non un metodo di server validate formaggio nel 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>
È pubblicato 18/07/2009 alle 01:09
fonte dall'utente
In altre lingue...                            


6 risposte

voti
0

Loop attraverso ciascuno degli elementi nella ckBoxListReasons. Ogni articolo sarà di tipo 'ListItem'.

Il ListItem avrà una proprietà chiamata 'Selected' che è un valore booleano. E 'vero quando si seleziona tale elemento. Qualcosa di simile a:

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

bolSelectionMade sarà impostato a vero se l'utente ha effettuato almeno una selezione. È quindi possibile utilizzare che per impostare lo stato valido di un particolare controllo di convalida che ti piace.

Spero che questo ti aiuti!

Richard.

Risposto il 18/07/2009 a 02:17
fonte dall'utente

voti
59

E 'facile fare questo lato server di convalida, ma io parto dal presupposto che si vuole fare è lato client?

JQuery può farlo molto facilmente fino a quando si ha qualcosa che tutti i controlli casella di controllo hanno in comune l'uso come selettore come la classe (CssClass sul vostro controllo NET). È possibile effettuare una semplice JQuery funzione e collegarlo a un validatore personalizzato ASP.NET. Ricorda se si fa andare via validatore personalizzato per fare in modo di controllare che lato server come pure nel caso in cui javascript non funziona, non si ottiene un controllo lato server gratuito come gli altri validatori .NET.

Per maggiori informazioni su validatori personalizzati controlla i seguenti link: www.asp.net e MSDN

Non è necessario utilizzare JQuery , rende solo la funzione javascript per iterare e guardare tutta la tua casella di controlli molto più facile, ma si può solo utilizzare vaniglia javascript, se volete.

Ecco un esempio che ho trovato su: Link originale

<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;
}

Nota a margine: JQuery è solo un po 'di file js comprendono che è necessario aggiungere alla tua pagina. Una volta che lo avete incluso è possibile utilizzare tutte le JQuery che ti piace. Niente da installare e sarà pieno supportato nella prossima versione di Visual Studio credo.

Risposto il 18/07/2009 a 02:33
fonte dall'utente

voti
3

Leggi questo articolo da 4 Guys From Rolla:

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

Essi mostrano come creare un validatore per i controlli casella di controllo e CheckBoxList che funziona esattamente come il RequiredFieldValidator per gli altri controlli .NET. Ha la validazione lato server e la validazione lato client. La parte bella di che è possibile specificare un ValidationGroup e funzionerà con il controllo ValidationSummary.

C'è anche un link in fondo di questo articolo per scaricare il sorgente e utilizzarlo nel progetto. Basta riferimento DLL e registrare i controlli e siete a posto.

Risposto il 18/07/2009 a 03:22
fonte dall'utente

voti
13

Ecco un detergente jQuery implementazione che permette ClientValidationFunction per qualsiasi numero di CheckBoxList controlli in una pagina:

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;
        }
    });
}

Ecco il 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." />

E, infine, il validatore personalizzato che permette la funzione client per recuperare il controllo di destinazione da 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);
    }
}
Risposto il 25/10/2010 a 15:59
fonte dall'utente

voti
1

Ecco un'altra soluzione che può essere considerato tramite Dado.Validators su 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" />

esempio codebehind.aspx.cs

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

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

Rif: Controllare se un casella è selezionata in un gruppo di caselle di controllo in clientside

Risposto il 16/08/2013 a 16:20
fonte dall'utente

voti
0

È possibile utilizzare un CustomValidatorper che con un po 'di 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>

E per 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>
Risposto il 31/03/2017 a 12:55
fonte dall'utente

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