2010-02-22 41 views

回答

8

您将不得不使用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; 
} 

注意,上面的代码是容易抛出异常。您需要添加额外的验证器来检查输入的日期是否可以解析,并且应该修改方法以确认在执行自己的测试之前已经通过了这些其他验证器。

此外,您可能还想添加另一个验证程序来测试结束日期实际上是否大于(或等于)开始日期。打破这条规则可能会引发自己的验证错误信息。你

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

感谢快速回复。 – 2010-02-22 09:56:17

0

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

1

也可以用时间跨度:

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

为什么你不是有关

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