У меня есть веб-форма с двумя настраиваемыми валидаторами:
- Один для подтверждения того, что строка является датой. Меня не волнует, в каком формате, если он разбирается.
- Другой, чтобы гарантировать, что одна дата равна или больше другой. Я просто не мог заставить валидатор сравнения нормально работать с любым форматом даты.
<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
выдается исключение формата. Очевидно, этот валидатор может проверять действительную дату перед синтаксическим анализом, но я действительно предпочел бы иметь дискретный валидатор с соответствующим сообщением.
Итак, вопрос заключается в следующем: что определяет последовательность срабатывания валидаторов? Если я чего-то не упускаю, это не объявляется на уровне тега.