我有两个TextBox
控件用于开始日期&结束日期输入。我必须验证结束日期不大于开始日期&开始日期和时间之间的差异结束日期不超过12个月。
答案 0 :(得分:8)
您必须使用CustomValidator
来执行此操作。在你的标记中,你会有这样的东西:
<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" />
答案 1 :(得分:1)
您也可以使用Timespan:
DateTime start = DateTime.Parse(DateBegin.Text);
DateTime end = DateTime.Parse(DateEnd.Text);
TimeSpan ts = end - start;
e.IsValid = ts.Days < 365;
答案 2 :(得分:0)
快速简便:两个验证器,一个比较验证器(比较两个控件)和一个自定义验证器以及服务器端方法来检查结束日期。
答案 3 :(得分:0)
为什么你不是那个
DateTime start = DateTime.Parse(DateBegin.Text);
DateTime end = DateTime.Parse(DateEnd.Text);
e.IsValid = (end-start).Years <1;