MSDNの例に基づいて、RangeValidator を使用してコード ビハインドで日付範囲を検証しようとしています。
到着日、出発日、希望ツアー日用の 3 つの TextBox があります。送信ボタンをクリックした後、ユーザーが他の 2 つの TextBox で指定した範囲外の目的のツアー日付を入力すると、RangeValidator のメッセージが表示されます。
RangeValidator の最小値と最大値は、ボタンの Click イベントで設定されます。その ControlToValidate (目的のツアー日) はマークアップで設定されます。
問題は、最初の 2 つの TextBox のいずれかにテキストがある場合、送信ボタンの Click イベントが発生しないことです。テキストが他の組み合わせで入力された場合、イベントが発生します (ただし、明らかに例外がスローされます)。
マークアップ:
Arrival date:
<br />
<asp:TextBox ID="txtArrival" runat="server"></asp:TextBox>
<br />
Departure date:
<br />
<asp:TextBox ID="txtDeparture" runat="server"></asp:TextBox>
<br />
Tour date:
<br />
<asp:TextBox ID="txtTourDate" runat="server"></asp:TextBox>
<br />
<asp:RangeValidator ID="RangeValidator1" runat="server" ControlToValidate="txtTourDate"></asp:RangeValidator>
<br />
<asp:Button ID="btnSubmit" runat="server" Text="submit" onclick="btnSubmit_Click"/>
分離コード::
protected void btnSubmit_Click(object sender, EventArgs e)
{
RangeValidator1.MinimumValue = txtArrival.Text;
RangeValidator1.MaximumValue = txtDeparture.Text;
RangeValidator1.Type = ValidationDataType.Date;
RangeValidator1.Validate();
if (!RangeValidator1.IsValid)
{
RangeValidator1.ErrorMessage = "The tour date must fall between " + txtArrival.Text + " and " + txtDeparture.Text;
}
}
編集:答えてくれてありがとう、しかし、RangeValidator の EnableClientScript 属性を「false」に設定していなかったことがわかりました。新しいルール - もう一度質問する前に 30 分待ちます :)