3

ASP.NET3.5を使用しています。ユーザーがアイテムを追加する必要のあるリストボックスがあります(このためのコードを作成しました)。私の要件は、少なくとも1つのアイテムをリストボックスに追加する必要があります。そうしないと、フォームを送信できません。このページには他にもいくつかのバリデーターがあり、それらはすべてValidationSummaryコントロールに書き込みます。このリストボックスの検証をValidationSummaryコントロールにも書き込みたいと思います。どんな助けでも大歓迎です。ありがとうございました。

4

7 に答える 7

5

カスタムバリデーターをドロップし、目的のエラーメッセージを追加し、カスタムバリデーターをダブルクリックして、イベントハンドラーのコードビハインドに移動します。次に、次のようにサーバー側を実装します。

protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args) 
{
        args.IsValid = ListBox1.Items.Count > 0; 
}

また、クライアント側のJavaScriptを実装することもできます。

私はこれをページに投げてすぐにテストしたので、少し調整する必要があるかもしれません:(ボタン1はリストボックスにアイテムを追加するだけです)

<script language="JavaScript">
<!--
  function ListBoxValid(sender, args)
  {
      args.IsValid = sender.options.length > 0;
  }
// -->
</script>    
<asp:ListBox ID="ListBox1" runat="server"></asp:ListBox>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" ValidationGroup="NOVALID" />
<asp:Button ID="Button2" runat="server" Text="ButtonsUBMIT"  />

<asp:CustomValidator ID="CustomValidator1" runat="server" 
ErrorMessage="CustomValidator" 
onservervalidate="CustomValidator1_ServerValidate" ClientValidationFunction="ListBoxValid"></asp:CustomValidator>

検証の概要をページに追加する場合、リストボックスまたはその他の収集可能なコントロールにアイテムがない場合は、ValidationGroupが同じである限り、エラーテキストがその概要に表示されます。 。

于 2008-09-24T15:48:01.787 に答える
5

これは私にはうまくいきませんでした:

function ListBoxValid(sender, args) 
{
        args.IsValid = sender.options.length > 0; 
}

しかし、これはしました:

function ListBoxValid(sender, args)
{
        var ctlDropDown = document.getElementById(sender.controltovalidate);
        args.IsValid = ctlDropDown.options.length > 0; 
}
于 2008-12-05T15:38:42.730 に答える
3

これらのプロパティを必ず CustomValidator に追加してください:

Display="Dynamic" ValidateEmptyText="True"
于 2011-06-10T14:56:43.240 に答える
1
<asp:CustomValidator 
     runat="server" 
     ControlToValidate="listbox1"
     ErrorMessage="Add some items yo!" 
     ClientValidationFunction="checkListBox"
/>

<script type="Text/JavaScript">
  function checkListBox(sender, args)
  {
      args.IsValid = sender.options.length > 0;
  }
</script>    
于 2008-11-20T22:49:33.237 に答える
1

実際、これはこれを機能させるための適切な方法です (JavaScript に関する限り)。

ListBox.options.length は、選択した数ではなく、常にオプションの総数になります。私が見つけた唯一の方法は、 for ループを使用してリストを調べることです。

function ListBoxValid(sender, args)
{

    var listBox = document.getElementById(sender.controltovalidate);

    var listBoxCnt = 0;

    for (var x =0; x<listBox.options.length; x++)
    {
        if (listBox.options[x].selected) listBoxCnt++;
    }

    args.IsValid = (listBoxCnt>0)

}
于 2010-05-03T17:41:39.220 に答える
0

これは私のために働く

<script language="JavaScript">
  function CheckListBox(sender, args)
  {
      args.IsValid = document.getElementById("<%=ListBox1.ClientID%>").options.length > 0;
  }
</script>    
<asp:ListBox ID="ListBox1" runat="server"></asp:ListBox>
<asp:CustomValidator ID="CustomValidator1" runat="server" 
ErrorMessage="*Required" ClientValidationFunction="CheckListBox"></asp:CustomValidator>
于 2016-11-17T08:52:57.653 に答える
-1

ClientID を送信して、コントロールをページに登録します。次に、Microsoft AJAX を使用してコントロールを取得し、値を確認できます。

于 2008-09-24T15:17:13.080 に答える