我有开始日期和结束日期输入的两个TextBox控件。我要验证该结束日期不超过开始日期及开始日期和结束日期之间的差时,不超过12个月。

有帮助吗?

解决方案

您必须使用 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" />

其他提示

您也可以使用时间跨度:

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

快速简单的:两个校验器,一个比较验证(这两种控制进行比较),和自定义验证与服务器侧方法来检查结束日期

为什么你不是关于

 DateTime start = DateTime.Parse(DateBegin.Text);
 DateTime end = DateTime.Parse(DateEnd.Text);
 e.IsValid = (end-start).Years <1;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top