web-dev-qa-db-ja.com

ユーザーがCheckBoxListで少なくとも1つのチェックボックスを選択したことを検証する方法は?

ユーザーに少なくとも1つのボックスをチェックするように要求するCheckBoxListコントロールがあります。1つでも3つでも、1つでもチェックするかどうかは関係ありません。

Asp.netの検証コントロールの精神では、これを実施するために何を使用できますか?また、Ajax検証エクステンダーを使用しているので、コードビハインド内の安っぽいサーバー検証メソッドではなく、他のコントロールのように見えるといいでしょう。

<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>
35
John Batdorf

この検証サーバー側を実行するのは簡単ですが、クライアント側で実行することを想定していますか?

JQuery は、すべてのチェックボックスコントロールがクラス(.NETコントロールのCssClass)などのセレクターとして共通して使用できるものがある限り、これを非常に簡単に実行できます。単純な JQuery 関数を作成し、ASP.NETカスタムバリデーターに接続できます。 JavaScriptが機能していない場合、カスタムバリデータールートを使用してサーバー側も確認することを忘れないでください。他の.NETバリデーターのような無料のサーバー側チェックは取得できません。

カスタムバリデータの詳細については、次のリンクを参照してください。 www.asp.net および [〜#〜] msdn [〜#〜]

JQuery を使用する必要はありません。javascript関数を繰り返してすべてのチェックボックスコントロールを簡単に確認できるようになりますが、必要に応じてVanilla javascriptを使用できます。

ここに私が見つけた例があります: オリジナルへのリンク

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

サイドノート: JQuery は、ページに追加する必要がある小さなjsファイルインクルードです。含まれたら、すべての JQuery を使用できます。インストールするものはなく、Visual Studioの次のバージョンでは完全にサポートされると思います。

60
Kelsey

これは、ページ上の任意の数のCheckBoxListコントロールに対してjQuery 1つを許可する実装ClientValidationFunctionです。

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

マークアップは次のとおりです。

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

最後に、クライアント関数が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);
    }
}
14
Nariman

4 Guys From Rollaのこの記事をご覧ください。

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

他の.NETコントロールのRequiredFieldValidatorとまったく同じように機能するCheckBoxコントロールとCheckBoxListコントロールのバリデーターを作成する方法を示します。サーバー側の検証とクライアント側の検証があります。それに関する素晴らしい部分は、ValidationGroupを指定でき、ValidationSummaryコントロールで動作することです。

記事の最後に、ソースをダウンロードしてプロジェクトで使用するためのリンクもあります。 dllを参照し、コントロールを登録するだけで準備完了です。

3
Austin

少しのJavaScriptでCustomValidatorを使用できます。

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

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>
1
VDWWD

GitHubの Dado.Validators で検討できる別のソリューションを次に示します。

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

例codebehind.aspx.cs

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

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

参照: クライアントサイドのチェックボックスのグループでチェックボックスがチェックされているかどうかを確認

1
roydukkey

CkBoxListReasonsの各アイテムをループします。各アイテムのタイプは「ListItem」です。

ListItemには、ブール値である「Selected」というプロパティがあります。そのアイテムが選択されているときは本当です。何かのようなもの:

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

bolSelectionMadeは、ユーザーが少なくとも1つの選択を行った場合にtrueに設定されます。その後、それを使用して、好きな特定の検証コントロールの有効状態を設定できます。

お役に立てれば!

リチャード。

0
Richard