ASP.NET3.5を使用しています。ユーザーがアイテムを追加する必要のあるリストボックスがあります(このためのコードを作成しました)。私の要件は、少なくとも1つのアイテムをリストボックスに追加する必要があります。そうしないと、フォームを送信できません。このページには他にもいくつかのバリデーターがあり、それらはすべてValidationSummaryコントロールに書き込みます。このリストボックスの検証をValidationSummaryコントロールにも書き込みたいと思います。どんな助けでも大歓迎です。ありがとうございました。
7 に答える
カスタムバリデーターをドロップし、目的のエラーメッセージを追加し、カスタムバリデーターをダブルクリックして、イベントハンドラーのコードビハインドに移動します。次に、次のようにサーバー側を実装します。
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が同じである限り、エラーテキストがその概要に表示されます。 。
これは私にはうまくいきませんでした:
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;
}
これらのプロパティを必ず CustomValidator に追加してください:
Display="Dynamic" ValidateEmptyText="True"
<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>
実際、これはこれを機能させるための適切な方法です (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)
}
これは私のために働く
<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>
ClientID を送信して、コントロールをページに登録します。次に、Microsoft AJAX を使用してコントロールを取得し、値を確認できます。