Cum de a valida un utilizator a ales cel puțin o casetă într-un CheckBoxList?

voturi
33

Am un control CheckBoxList pe care vreau să solicite utilizatorului să verifice cel puțin o cutie, nu contează dacă acestea verifică fiecare unul, sau 3, sau chiar doar unul.

În spiritul controalelor de validare a lui asp.net, ce pot folosi pentru a pune în aplicare acest lucru? Sunt, de asemenea, folosind extensia de validare Ajax, asa ca ar fi frumos dacă s-ar putea arata ca alte controale, și nu unele metode de server valideaza brânzos în 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>
Întrebat 18/07/2009 la 01:09
sursa de către utilizator
În alte limbi...                            


6 răspunsuri

voturi
0

Bucla prin fiecare dintre elementele din ckBoxListReasons. Fiecare element va fi de tip „ListItem“.

ListItem va avea o proprietate numită „Selected“, care este un boolean. Este adevărat atunci când este selectat acel element. Ceva asemănător cu:

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

bolSelectionMade va fi setat la adevărat în cazul în care utilizatorul a efectuat cel puțin o selecție. Puteți folosi apoi că pentru a seta starea valabilă a oricărui control validator special , vă place.

Sper că acest lucru vă ajută!

Richard.

Publicat 18/07/2009 la 02:17
sursa de către utilizator

voturi
59

Este ușor de a face acest lucru pe partea de server de validare, dar eu sunt presupunând că vrei să o faci partea de client?

JQuery poate face acest lucru foarte ușor , atâta timp cât aveți ceva ce toate controalele din casetele de selectare au în comun de a utiliza ca un selector de clasă , cum ar fi (CssClass pe controlul .NET). Puteți face un simplu JQuery funcția și conectați - l la un validator personalizat ASP.NET. Amintiți - vă dacă faci merge pe ruta validator personalizat pentru a vă asigura că verificați partea de server , precum și în cazul în care JavaScript nu funcționează, nu primiți un control pe partea de server gratuit ca celelalte validatori .NET.

Pentru mai multe informații despre validatoare personalizate accesați următoarele link - uri: www.asp.net și MSDN

Nu aveți nevoie să utilizați JQuery , ea face doar funcția JavaScript pentru a itera si uita - te la toate checkbox controlează mult mai ușor , dar puteți folosi doar vanilie javascript daca doresti.

Aici este un exemplu am găsit la: Link la versiunea 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 Notă: JQuery este doar un fișier js pic includ aveți nevoie să adăugați la pagina ta. Odată ce ați inclus puteți utiliza toate JQuery vă place. Nimic de instalat și va fi susținută pe deplin în următoarea versiune de Visual Studio cred.

Publicat 18/07/2009 la 02:33
sursa de către utilizator

voturi
3

Check out acest articol de la 4 tipi de la Rolla:

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

Ele vă arată cum să creați un validator pentru controalele caseta de selectare și CheckBoxList care funcționează exact ca RequiredFieldValidator pentru celelalte controale .NET. Are validarea pe partea de server și validarea pe partea de client. Partea frumoasă despre care este puteți specifica un ValidationGroup si va lucra cu controlul ValidationSummary.

Există, de asemenea, un link în partea de jos a articolului pentru a descărca sursa și să-l utilizați în proiectul dumneavoastră. Tocmai ai face referire la dll și înregistra comenzile și vă sunt bune pentru a merge.

Publicat 18/07/2009 la 03:22
sursa de către utilizator

voturi
13

Iată un aspirator jQuery de punere în aplicare , care permite o ClientValidationFunction pentru orice număr de CheckBoxList controale pe o pagină:

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

Iată marcajul:

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

Și, în sfârșit, validatorul personalizat care permite funcția de client pentru a prelua controlul țintă prin 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);
    }
}
Publicat 25/10/2010 la 15:59
sursa de către utilizator

voturi
1

Aici este o altă soluție care poate fi considerată prin intermediul Dado.Validators pe 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" />

Exemplul codebehind.aspx.cs

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

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

Ref: Verificați dacă o casetă de selectare este bifată într - un grup de casete de selectare în clientside

Publicat 16/08/2013 la 16:20
sursa de către utilizator

voturi
0

Puteți utiliza o CustomValidatorpentru că , cu un pic 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>

Iar pentru o 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>
Publicat 31/03/2017 la 12:55
sursa de către utilizator

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