使用ASP.NET验证程序验证日期

Nic*_*las 65 asp.net validation

我正在尝试使用ASP.NET RangeValidator来验证文本框上的日期.在文本框中输入的日期格式为dd MMMM yyyy.

如何使用范围验证器验证有效日期?如果我输入1000年1月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>
Run Code Online (Sandbox Code Playgroud)

Sho*_*ban 128

最好的选择是

将比较验证器添加到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>
Run Code Online (Sandbox Code Playgroud)

  • @Shoban - 如果我的日期格式为'DD/MM/YYYY'怎么办? (6认同)
  • 简单而优雅.此外,内置控件还会检查有效/无效的闰年日期.2/29/2011说无效,但2/29/2012回来有效.没有必要用花哨的正则表达式来解决! (3认同)
  • 请注意,CompareValidator依赖于文化,所以如果你想要另一个日期格式(例如dd-mm-yyyy),只需按照文化设置 (3认同)

Chr*_*tal 28

CustomValidator也可以在这里工作:

<asp:CustomValidator runat="server"
    ID="valDateRange" 
    ControlToValidate="txtDatecompleted"
    onservervalidate="valDateRange_ServerValidate" 
    ErrorMessage="enter valid date" />
Run Code Online (Sandbox Code Playgroud)

代码隐藏:

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);
}
Run Code Online (Sandbox Code Playgroud)


小智 8

我认为以下是最简单的方法.

<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>
Run Code Online (Sandbox Code Playgroud)