web-dev-qa-db-ja.com

ASP.NETバリデーターによる日付検証

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

範囲検証ツールを使用して有効な日付を検証するにはどうすればよいですか?最小値または最大値として1 1000年1月を入力すると、値を日付型に変換できないというエラーが表示されますが、別の形式を使用すると入力したテキストを無効としてピックアップします。

以下は私のコードです:

<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>
65
Nicholas

最適なオプションは

比較検証ツールをWebフォームに追加します。 controlToValidateを設定します。 TypeプロパティをDateに設定します。その演算子プロパティをDataTypeCheckに設定します。例:

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

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);
}
28

次の方法が最も簡単な方法だと思います。

<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>
7
Cherian Paul

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

2
tvanfosson