2012-02-21 110 views
9

大家都知道比较验证器可用于验证日期并根据运营商类型进行检查(<,< =,> =等)。我已经设置cultureinvariantvalues="true"属性来验证两个包含日期的文本框控件。我必须限制他们,以便开始日期必须早于完成日期。验证好象当我输入一个描述性的日期像下面失败:Asp.net比较验证器以验证日期

StartDate: Tuesday, 21 February 2012 

FinishDate: Wednesday, 22 February 2012 

尽管22比21验证失败较大。我使用的标记如下。如果您需要格式化信息的任何理由,这是dddd, dd MMMM yyyy

<asp:CompareValidator id="cvtxtStartDate" runat="server" 
     controltocompare="txtFinishDate" 
     cultureinvariantvalues="true" 
     display="Dynamic" 
     enableclientscript="true" 
     controltovalidate="txtStartDate" 
     errormessage="Start date must be earlier than finish date" 
     type="Date" 
     setfocusonerror="true" 
     operator="LessThanEqual" 
     text="Start date must be earlier than finish date"> 
+0

哎,你使用单比较验证了两个文本框? – JayOnDotNet 2012-02-21 06:22:02

+0

@JayaPrakashRokkam它就够了。无论哪种方式验证会发生 – Deeptechtons 2012-02-21 06:31:36

回答

27

试试这个办法,先输入开始日期和检查与结束日期文本框的比较验证:

<asp:CompareValidator id="cvtxtStartDate" runat="server" 
    ControlToCompare="txtStartDate" cultureinvariantvalues="true" 
    display="Dynamic" enableclientscript="true" 
    ControlToValidate="txtFinishDate" 
    ErrorMessage="Start date must be earlier than finish date" 
    type="Date" setfocusonerror="true" Operator="GreaterThanEqual" 
    text="Start date must be earlier than finish date"></asp:CompareValidator> 
+2

+1的日期以获得最佳解决方案。如果我有另一个帐户,为简单起见+1。做得好。 – 2013-03-22 03:27:17

0

试试自定义验证并且在onservervalidate事件背后的代码将文本转换为DateTime,然后做了比较。

protected void DateTimeComparision_ServerValidate(object source, ServerValidateEventArgs args) 
    { 
     args.IsValid = Convert.ToDateTime(txtStartDate.Text) < Convert.ToDateTime(txtFinishDate.Text); 
    } 
+0

自定义验证程序是我的最后手段。我知道如何使用所有这些验证器,我只是想知道比较验证器是否仅支持format'm/d/y' – Deeptechtons 2012-02-21 06:32:25

4

比较验证器类型= date.But该日期类型限制接受只有特定格式的日期,即ToShortDateString()。 如果要比较的两个文本框的日期格式采用ToLongDateString()等其他格式或ToString(“dd MMMM,yyyy”)指定的格式,则比较不起作用。 CustomValidator isonly选项。 如果你想使用比较验证才

textstartdate.text=Calendar1.SelectedDate.ToShortDateString(); 
textfinishdate=Calendar2.SelectedDate.ToShortDateString(); 
<asp:CompareValidator ID="CompareValidator4" runat="server" 
        ControlToCompare="textstartdate" ControlToValidate="textfinishdate" 
        CultureInvariantValues="True" 
        ErrorMessage="Date should be greater than booking date." 
        Operator="GreaterThanEqual" SetFocusOnError="True" Type="Date"></asp:CompareValidator> 
0
function FromAndToDateValidate() { 
try { 
    var StartDate = new Date(); 
    StartDate = $("#dtpFromDate").val(); 

    var EndDate = new Date(); 
    EndDate = $("#dtpToDate").val(); 
    args.IsValid = (StartDate <= EndDate); 
} 
catch (ex) { 
    alert(ex); 
} 
}