2009-06-02 62 views
64

私は、ASP.NET RangeValidatorを使用してテキストボックスの日付を検証しようとしています。テキストボックスに入力された日付の形式はdd MMMM yyyyです。ASP.NETバリデータによる日付検証

範囲バリデータを使用して有効な日付を検証するにはどうすればよいですか? 1 January 1000を最小値または最大値として入力すると、値をタイプ日付に変換できないというエラーが表示されますが、別のフォーマットを使用すると、入力したテキストが無効であると判断されます。

<asp:TextBox 
    runat="server" 
    ID="txtDatecompleted" 
/> 
<cc2:CalendarExtender 
    ID="datecompletedExtender" 
    runat="server" 
    TargetControlID="txtDatecompleted" 
    Format="dd MMMM yyyy" 
/> 
<asp:RangeValidator 
    runat="server" 
    ID="RangeValidator1" 
    Type="Date" 
    ControlToValidate="txtDatecompleted" 
    MaximumValue="9999/12/28" 
    MinimumValue="1000/12/28" 
    ErrorMessage="enter valid date" 
    Display="None" 
/> 
<cc2:ValidatorCalloutExtender 
    ID="RangeValidator1_ValidatorCalloutExtender" 
    runat="server" 
    Enabled="True" 
    TargetControlID="RangeValidator1"> 
</cc2:ValidatorCalloutExtender> 
+0

フォーマットを検証しようとしていますか?あなたの問題を理解していないからです。 – TStamper

答えて

126

ベストオプションは

がWebフォームにバリデータを比較する追加のようになります。

以下は私のコードです。そのcontrolToValidateを設定します。 TypeプロパティをDateに設定します。例:

<asp:CompareValidator 
    id="dateValidator" runat="server" 
    Type="Date" 
    Operator="DataTypeCheck" 
    ControlToValidate="txtDatecompleted" 
    ErrorMessage="Please enter a valid date."> 
</asp:CompareValidator> 
+3

シンプルでエレガント。さらに、ビルトインされたコントロールは、有効/無効のうるう年の日付をチェックします。 2012/2/29/2011に無効と記載されていますが、2012/2/29が有効です。派手な正規表現を扱う必要はありません! –

+6

@ Shoban - 私の日付形式が 'DD/MM/YYYY'の場合はどうですか? –

+1

@ Ryan Sammut私はまた、この質問に対する答えを知りたいと思っています。 Date型CompareValidatorはMM/DD/YYを受け入れます。私は2桁の年の値を除外したいと思います。 – danyim

2

私は、日付をアプリケーションの現在のカルチャで指定する必要があると信じています。 CultureInvariantValuesをtrueに設定して試し、問題が解決するかどうか確認してください。それ以外の場合は、現在のカルチャ(またはculture自体)のためにDateTimeFormatを変更して、必要なものを取得する必要があります。

24

AのCustomValidatorはまた、ここに働くだろう:

<asp:CustomValidator runat="server" 
    ID="valDateRange" 
    ControlToValidate="txtDatecompleted" 
    onservervalidate="valDateRange_ServerValidate" 
    ErrorMessage="enter valid date" /> 

コードビハインド:

protected void valDateRange_ServerValidate(object source, ServerValidateEventArgs args) 
{ 
    DateTime minDate = DateTime.Parse("1000/12/28"); 
    DateTime maxDate = DateTime.Parse("9999/12/28"); 
    DateTime dt; 

    args.IsValid = (DateTime.TryParse(args.Value, out dt) 
        && dt <= maxDate 
        && dt >= minDate); 
} 
+0

あなたの方法を試しましたが、更新パネル内で失敗しました。 Pls chk:http://stackoverflow.com/questions/2071585/asp-net-custom-validation-not-working-even-when-required-field-validator-is-use/14361135#14361135 –

+1

これが最良の方法でした私のために、最も簡単で、私は何がチェックされ、コードの中で行われたかを完全にコントロールしています。 Thnx alot Chris !! – user1501127

+1

これは、datetimeフィールドも使用するレガシーシステムのSQL日付範囲の編集に適しています。ありがとう。 –

7

を私は次のようにそれを行うための最も簡単な方法だと思います。

<asp:TextBox ID="DateControl" runat="server" Visible="False"></asp:TextBox> 
<asp:RangeValidator ID ="rvDate" runat ="server" ControlToValidate="DateControl" ErrorMessage="Invalid Date" Type="Date" MinimumValue="01/01/1900" MaximumValue="01/01/2100" Display="Dynamic"></asp:RangeValidator> 
関連する問題