0

同じアイテム/値を持つ4つのドロップダウンリストがあります。フォームのアップロード時に同じ値が複数回選択されるのを防ぎたい。カスタムバリデーターを使用してそれを行うにはどうすればよいですか?ありがとう!

4

3 に答える 3

1

ドロップダウン リストを変更して同じ値を選択できないようにするという 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 関数を使用できます。

于 2010-07-28T14:42:52.910 に答える
0

これは最良の答えではないかもしれませんが、いつでも各ドロップダウン リストにアクション リスナーを追加して、ドロップダウン リストの選択が変更されるたびにアクション リスナーが呼び出されるようにすることができます。

このようにして、2番目のドロップダウンリストで選択された要素が変更されると、そのアクションリスナーが呼び出され、その中で他のドロップダウンリストをリセットして、選択した値が表示されないようにするか、可能であればその値を選択できないように設定します

また

ドロップダウン リストの 1 つの選択が変更された場合、それが他のドロップダウン リストで選択された他の値と等しいかどうかを確認し、等しい場合は、ユーザーにメッセージ ボックスを表示するか、選択を空白に変更します。選択またはまだ使用されていない最初の使用可能な値。

于 2010-07-28T14:35:26.600 に答える
0

haveSameValue 関数に少しだけ取り組みます。これは私にはうまくいくようです。ご協力いただきありがとうございます。

 protected bool haveSameValue(string first, string second)

{
if (!string.IsNullOrEmpty(first) & !string.IsNullOrEmpty(second) && first.Equals(second)) {
    return first.Equals(second);
}

}

于 2010-07-29T16:53:10.997 に答える