同じアイテム/値を持つ4つのドロップダウンリストがあります。フォームのアップロード時に同じ値が複数回選択されるのを防ぎたい。カスタムバリデーターを使用してそれを行うにはどうすればよいですか?ありがとう!
3 に答える
ドロップダウン リストを変更して同じ値を選択できないようにするという Kyra の最初の解決策をお勧めします。ユーザーに何が間違っていたかを伝えるよりも、問題を防ぐ方が常に優れています。ただし、 CustomValidatorを使用したい場合は、次のコードが機能します。
<asp:CustomValidator ID="dropDownValidation" runat="server" OnServerValidate="dropDownValidation_ServerValidate"
ErrorMessage="The same value cannot be selected in more than one drop down." />
そして、コード ビハインドまたはスクリプト タグで。
protected void dropDownValidation_ServerValidate(object sender, ServerValidateEventArgs e)
{
e.IsValid = !haveSameValue(DropDownList1.SelectedValue, DropDownList2.SelectedValue) &&
!haveSameValue(DropDownList1.SelectedValue, DropDownList3.SelectedValue) &&
!haveSameValue(DropDownList1.SelectedValue, DropDownList4.SelectedValue) &&
!haveSameValue(DropDownList2.SelectedValue, DropDownList3.SelectedValue) &&
!haveSameValue(DropDownList2.SelectedValue, DropDownList4.SelectedValue) &&
!haveSameValue(DropDownList3.SelectedValue, DropDownList4.SelectedValue);
}
protected bool haveSameValue(string first, string second)
{
if (first != null && second != null)
{
return first.Equals(second);
}
return first == null && second == null;
}
これは明らかにさらに洗練されたものであり、必要に応じてClientValidationFunctionプロパティを使用してクライアント側の検証を提供するために javascript 関数を使用できます。
これは最良の答えではないかもしれませんが、いつでも各ドロップダウン リストにアクション リスナーを追加して、ドロップダウン リストの選択が変更されるたびにアクション リスナーが呼び出されるようにすることができます。
このようにして、2番目のドロップダウンリストで選択された要素が変更されると、そのアクションリスナーが呼び出され、その中で他のドロップダウンリストをリセットして、選択した値が表示されないようにするか、可能であればその値を選択できないように設定します
また
ドロップダウン リストの 1 つの選択が変更された場合、それが他のドロップダウン リストで選択された他の値と等しいかどうかを確認し、等しい場合は、ユーザーにメッセージ ボックスを表示するか、選択を空白に変更します。選択またはまだ使用されていない最初の使用可能な値。
haveSameValue 関数に少しだけ取り組みます。これは私にはうまくいくようです。ご協力いただきありがとうございます。
protected bool haveSameValue(string first, string second)
{
if (!string.IsNullOrEmpty(first) & !string.IsNullOrEmpty(second) && first.Equals(second)) {
return first.Equals(second);
}
}