0

2 つの異なる条件に対して組み込みのバリデーターを使用して入力用の asp.net テキスト ボックスを検証する方法はありますか? テキストボックスは日付ピッカーと組み合わせて使用​​ され、現在、検証するために次のようなRegularExpressionValidatorがあります。

<asp:TextBox ID="tbStartDate" runat="server" Width="100" CssClass="TextCompact">yyyy</asp:TextBox>
<asp:HyperLink ID="hlStartDate" runat="server" ImageUrl="~/Images/iconCalendar.gif"></asp:HyperLink><br />
<asp:RegularExpressionValidator ID="revStartDate" ControlToValidate="tbStartDate"
     CssClass="TextCompact" runat="server" ErrorMessage="* Invalid Date" ValidationExpression="^(\d{4})$" />

無効な日付が入力されるたびに起動します。日付ピッカーを使用するか、日付文字列を入力できます。

問題は、テキスト ボックスにデータがある場合にのみ検証したいということです。テキスト ボックスが空の場合は、検証せずに通過させます。

これは可能ですか、それともカスタムのクライアント側の検証が必要ですか?

ありがとう、リショー。

アップデート:

BaseValidator クラスから派生した独自のバリデーター クラスを作成して接続することにしましたが、コンパイラ エラーが発生します。

namespace Abcdefg1234
{
    public class Custom_Validator : BaseValidator
    {
        public Custom_Validator()
        {

        }

        protected override bool EvaluateIsValid()
        {
            String value = this.GetControlValidationValue(this.ControlToValidate);
            return ValidateControls(value.Trim());
        }

        public static bool ValidateControls(string value)
        {

            if(Regex.IsMatch(value, @"^(\d{4})$") == true)
                return true;
            else if(value == "")
                return true;
            else
                return false;
        }
    }
}

次に、ページ ディレクティブ タグを含めました。

<%@ Register TagPrefix="Cv" Namespace="Abcdefg1234" TagName="CustomValidaitonX" %>

そして実際のタグ:

Cv:Custom_Validator ID="cvtbStartDate" ControlToValidate="tbStartDate"                        runat="server" ErrorMessage="* Invalid Date" />

不明なサーバー タグが表示されます。何か案は?ありがとう。

4

1 に答える 1

0

空のテキスト ボックスで起動する唯一の組み込みバリデーターはRequiredFieldValidator. テキストボックスが空の場合、それに関連付けられている他のバリデーターはフォーム送信時に起動しません。

つまり、RegularExpressionValidatorテキストボックスが空の状態で送信しても発火せず、そのままで問題ないはずです。異なる動作を経験していますか?

ETA: が認識されるようにするには、登録ページ ディレクティブでアセンブリ名を指定する必要がありますCustom_Validator。カスタム コントロールにタグ名が必要だとは思いません。

于 2013-02-22T21:27:09.723 に答える