2009-06-02 123 views
64

我试图使用ASP.NET RangeValidator来验证文本框上的日期。输入文本框的日期格式为dd MMMM yyyy使用ASP.NET验证器进行日期验证

如何使用范围验证器验证有效日期?如果我输入1000年1月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 2009-06-02 14:20:41

回答

126

最好的办法是

添加比较验证到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> 
+3

简单而优雅。另外内置的控件还检查有效/无效的闰年日期。 2/29/2011表示无效,但2/29/2012回来有效。不需要花哨的正则表达式! – 2012-01-25 20:19:25

+6

@Shoban - 如果我的日期格式是“DD/MM/YYYY”,那么怎么办? – 2012-07-19 12:35:48

2

我相信日期必须在应用程序的当前文化中指定。您可能需要尝试将CultureInvariantValues设置为true,然后查看是否可以解决您的问题。否则,您可能需要更改当前文化的DateTimeFormat(或culture本身)以获得您想要的内容。

24

一个的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); 
} 
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>