2つのカスタムバリデーターを含むWebフォームがあります。
- 文字列が日付であることを検証するための1つ。解析可能である限り、どの形式でも構いません。
- もう1つは、ある日付が別の日付以上であることを確認するためのものです。比較バリデーターをどの日付形式でもうまく再生させることができませんでした。
<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
です。明らかに、このバリデーターは解析する前に有効な日付をチェックできますが、適切なメッセージを含む個別のバリデーターが必要です。
だから問題はこれです:バリデーターが起動するシーケンスを決定するものは何ですか?何かが足りない場合を除いて、これはタグレベルで宣言されていません。