我有一个带有两个自定义验证器的网络表单:
- 用于验证字符串是否为日期。我不在乎什么格式,只要它是可解析的。
- 另一个确保一个日期等于或大于另一个日期。我只是无法让比较验证器与任何日期格式配合得很好。
<asp:TextBox ID="txtResourceStartDate" runat="server"
CssClass="textBox mandatory dateField" />
<asp:CustomValidator ID="valResourceStartDateIsDate" runat="server"
ControlToValidate="txtResourceStartDate" Display="None"
ErrorMessage="Start date must be a valid date"
OnServerValidate="Date_ServerValidate" />
<asp:TextBox ID="txtResourceEndDate" runat="server"
CssClass="textBox mandatory dateField" />
<asp:CustomValidator ID="valResourceEndDateIsDate" runat="server"
ControlToValidate="txtResourceEndDate" Display="None"
ErrorMessage="End date must be a valid date"
OnServerValidate="Date_ServerValidate" />
<asp:CustomValidator Display="None" Text="" ID="valForStartEndDate" runat="server"
OnServerValidate="ValidateStartEndDate"
ErrorMessage="Last day must be greater than or equal to first day" />
protected void Date_ServerValidate(object source, ServerValidateEventArgs args)
{
DateTime outDate;
args.IsValid = DateTime.TryParse(args.Value, out outDate);
}
protected void ValidateStartEndDate(object sender, ServerValidateEventArgs e)
{
e.IsValid = DateTime.Parse(txtResourceEndDate.Text) >=
DateTime.Parse(txtResourceStartDate.Text);
}
问题是ValidateStartEndDate
验证器在验证器之前触发Date_ServerValidate
,因此如果日期无效,则会在DateTime.Parse
. 显然,这个验证器可以在解析之前检查一个有效的日期,但我真的更喜欢有一个带有适当消息的离散验证器。
所以问题是:什么决定了验证器触发的顺序?除非我遗漏了什么,否则不会在标签级别声明。