Hogyan érvényesíti a felhasználó úgy döntött, legalább egy jelölőnégyzetet a CheckBoxList?

szavazat
33

Van egy CheckBoxList kontroll, hogy szeretnék a felhasználónak be legalább egy doboz, nem számít, ha ellenőrizni minden egyes ember, vagy 3, vagy akár csak egy.

Ennek jegyében az asp.net érvényesítési ellenőrzés, mit tudok használni érvényesíteni ezt? Én is az Ajax érvényesítési extender, így jó lenne, ha az a következőképpen nézne egyéb ellenőrzések, és nem valami sajtos szerver tesztelte módszer az 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>
A kérdést 18/07/2009 01:09
a forrás felhasználó
Más nyelveken...                            


6 válasz

szavazat
0

Hurok végig az elemek ckBoxListReasons. Minden elem lesz „típusú Listitem”.

A Listitem lesz egy ingatlan úgynevezett „kiválasztott”, amely egy logikai. Igaz, ha ez a tétel nem kerül kiválasztásra. Valami hasonló:

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

bolSelectionMade lesz állítva igaz, ha a felhasználó már legalább egy kiválasztása. Akkor majd, hogy állítsa be a Érvényes állapotát különösebb érvényesítő ellenőrzés tetszik.

Remélem ez segít!

Richard.

Válaszolt 18/07/2009 02:17
a forrás felhasználó

szavazat
59

Ez könnyű ezt érvényesítési szerver oldalon, de én feltételezve azt szeretné csinálni kliens oldalon?

JQuery megteheti ezt nagyon könnyen, amíg van valami, hogy minden négyzetet ellenőrzéseket a közös használatát, mint a választó, mint osztály (CssClass a .NET kontroll). Tudod, hogy egy egyszerű JQuery funkciót, és csatlakoztassa a ASP.NET egyéni érvényesítő. Emlékezz, ha nem megy az egyéni érvényesítő útvonalat, hogy megbizonyosodjon arról, hogy ellenőrizze, hogy szerver oldalon is abban az esetben, javascript nem működik, akkor nem kap egy ingyenes szerver oldali ellenőrzést, mint a többi .NET érvényesítő.

További információk az egyéni érvényesítő nézd meg az alábbi linkeken: www.asp.net és MSDN

Nem kell használni jQuery , csak teszi a javascript függvény segítségével navigálhat, és nézd meg az összes négyzetet vezérli sokkal könnyebb, de ha lehet csak használni vanília javascript, ha úgy tetszik.

Itt egy példa, én találtam meg: Link az eredeti

<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 Megjegyzés: JQuery csak egy kicsit js fájl tartalmazza hozzá kell adnunk az oldalon. Ha megvan benne használhatja a JQuery tetszik. Semmi sem telepíteni, és ez lesz a teljes támogatott a következő verziója a Visual Studio, azt hiszem.

Válaszolt 18/07/2009 02:33
a forrás felhasználó

szavazat
3

Nézd meg ezt a cikket a 4 srácot Rolla:

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

Azt mutatják, hogyan lehet létrehozni egy érvényesítő a CheckBox és CheckBoxList vezérlők pontosan úgy működik, mint a RequiredFieldValidator a többi .NET vezérlők. Ez a szerver oldali validálás és a kliens oldali validálás. A szép az egészben, hogy megadhatja a ValidationGroup és működni fog a ValidationSummary ellenőrzés.

Van is egy link alján a cikk le a forrást, és használja a projekt. Te csak hivatkozni a dll, és regisztrálja az ellenőrzések, és akkor jó menni.

Válaszolt 18/07/2009 03:22
a forrás felhasználó

szavazat
13

Itt egy tisztább jQuery végrehajtását, amely lehetővé teszi egy ClientValidationFunction bármennyi CheckBoxList ellenőrzések egy oldalon:

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

Itt a jelölést:

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

És végül, az egyéni érvényesítő, amely lehetővé teszi a kliens funkció letölteni a cél ellenőrzési azonosító:

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);
    }
}
Válaszolt 25/10/2010 15:59
a forrás felhasználó

szavazat
1

Itt van egy másik megoldás, hogy lehet tekinteni keresztül Dado.Validators GitHubról.

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

példa codebehind.aspx.cs

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

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

Ref: Ellenőrizze, hogy a jelölőnégyzet be van jelölve egy csoport jelölőnégyzetet ügyféloldali

Válaszolt 16/08/2013 16:20
a forrás felhasználó

szavazat
0

Használhatja a CustomValidatorszámára, hogy egy kicsit a 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>

És egy 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>
Válaszolt 31/03/2017 12:55
a forrás felhasználó

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