【问题标题】:ASP.NET validator to compare two date difference is not more than 12 monthsASP.NET 验证器比较两个日期差异不超过 12 个月
【发布时间】:2010-02-22 09:25:06
【问题描述】:

我有两个 TextBox 控件用于输入开始日期和结束日期。我必须验证结束日期不大于开始日期并且开始日期和结束日期之间的差异不超过 12 个月。

【问题讨论】:

    标签: asp.net custom-validators


    【解决方案1】:

    您必须使用CustomValidator 来执行此操作。在你的markyou中,你会有这样的东西:

    <asp:TextBox ID="txbStartDate" runat="server" />
    <asp:TextBox ID="txbEndDate" runat="server" />
    <asp:CustomValidator OnServerValidate="ValidateDuration"
        ErrorMessage="Dates are too far apart" runat="server" />
    

    在您的代码中,您定义了验证处理程序:

    protected void ValidateDuration(object sender, ServerValidateEventArgs e)
    {
        DateTime start = DateTime.Parse(txbStartDate.Text);
        DateTime end = DateTime.Parse(txbEndDate.Text);
    
        int months = (end.Month - start.Month) + 12 * (end.Year - start.Year);
    
        e.IsValid = months < 12.0;
    }
    

    请注意,上面的代码容易引发异常。您将需要添加额外的验证器来检查输入的日期是否可以被解析,并且应该修改 ValidateDuration 方法以确认这些其他验证器已经通过,然后再进行自己的测试。

    此外,您可能还需要添加另一个验证器来测试结束日期实际上是否大于(或等于)开始日期。违反此规则可能会引发其自身的验证错误消息。

    <asp:CompareValidator Operator="GreaterThanEqual" Type="Date"
        ControlToValidate="txbEndDate" ControlToCompare="txbStartDate"
        ErrorMessage="Let's get started first!" runat="server" />
    

    【讨论】:

      【解决方案2】:

      你也可以使用时间跨度:

              DateTime start = DateTime.Parse(DateBegin.Text);
              DateTime end = DateTime.Parse(DateEnd.Text);
              TimeSpan ts = end - start;
              e.IsValid = ts.Days < 365;
      

      【讨论】:

        【解决方案3】:

        快速简单:两个验证器,一个是比较验证器(用于比较两个控件),另一个是自定义验证器,该验证器带有用于检查结束日期的服务器端方法。

        【讨论】:

          【解决方案4】:

          为什么你不喜欢那个

           DateTime start = DateTime.Parse(DateBegin.Text);
           DateTime end = DateTime.Parse(DateEnd.Text);
           e.IsValid = (end-start).Years <1;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-03-11
            • 2011-12-09
            • 2013-12-08
            • 1970-01-01
            • 2017-07-15
            相关资源
            最近更新 更多