ユーザーに少なくとも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>
この検証サーバー側を実行するのは簡単ですが、クライアント側で実行することを想定していますか?
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の次のバージョンでは完全にサポートされると思います。
これは、ページ上の任意の数の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);
}
}
4 Guys From Rollaのこの記事をご覧ください。
http://aspnet.4guysfromrolla.com/articles/092006-1.aspx
他の.NETコントロールのRequiredFieldValidatorとまったく同じように機能するCheckBoxコントロールとCheckBoxListコントロールのバリデーターを作成する方法を示します。サーバー側の検証とクライアント側の検証があります。それに関する素晴らしい部分は、ValidationGroupを指定でき、ValidationSummaryコントロールで動作することです。
記事の最後に、ソースをダウンロードしてプロジェクトで使用するためのリンクもあります。 dllを参照し、コントロールを登録するだけで準備完了です。
少しの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>
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
}
};
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に設定されます。その後、それを使用して、好きな特定の検証コントロールの有効状態を設定できます。
お役に立てれば!
リチャード。