3

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

4

4 回答 4

8

您将不得不使用 aCustomValidator来执行此操作。在你的 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" />
于 2010-02-22T09:32:20.033 回答
1

您也可以使用时间跨度:

        DateTime start = DateTime.Parse(DateBegin.Text);
        DateTime end = DateTime.Parse(DateEnd.Text);
        TimeSpan ts = end - start;
        e.IsValid = ts.Days < 365;
于 2013-03-07T04:59:17.597 回答
0

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

于 2010-02-22T09:28:20.137 回答
0

为什么你不关心那个

 DateTime start = DateTime.Parse(DateBegin.Text);
 DateTime end = DateTime.Parse(DateEnd.Text);
 e.IsValid = (end-start).Years <1;
于 2016-10-13T20:30:41.993 回答