38

ユーザーが少なくとも 1 つのボックスをチェックするように要求する CheckBoxList コントロールを持っています。

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

6 に答える 6

65

この検証はサーバー側で行うのは簡単ですが、クライアント側で行いたいと思いますか?

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

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

JQueryを使用する必要はありません。JavaScript 関数を反復処理してすべてのチェックボックス コントロールを簡単に確認できるようにするだけですが、必要に応じてバニラ 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 で完全にサポートされると思います。

于 2009-07-18T01:33:19.467 に答える
14

ページ上の任意の数のCheckBoxListコントロールに対して 1 つのClientValidationFunctionを許可する、よりクリーンなjQuery実装を次に示します。

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);
    }
}
于 2010-10-25T14:59:29.237 に答える
-1

ckBoxListReasons の各項目をループします。各アイテムは「ListItem」タイプになります。

ListItem には、ブール値である「Selected」というプロパティがあります。その項目が選択されている場合は true です。何かのようなもの:

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

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

于 2009-07-18T01:17:05.127 に答える