0

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 分待ちます :)

4

3 に答える 3

2

RangeValidators プロパティで最小値と最大値を設定する必要があります。これにより、入力が検証され、エラーがない場合は、ポストバックを作成できるコントロールが有効になります。

于 2011-11-18T12:04:03.593 に答える
1

クライアント側でRangeValidatorsminmaxpropertisを設定する必要があります。送信ボタンのjavascript関数OnClientClickを呼び出すことができます。また、ここからRangeValidatorの最小最大値を設定できます。このような:

<asp:Button ID="btnSubmit" runat="server" Text="submit" OnClientClick="return SetProperties();" onclick="btnSubmit_Click"/> 

<script type="text/javascript">
    function SetProperties()
    {
        var r = document.getElementById("RangeValidator1");
        r.MaximumValue = document.getElementById("txtDeparture").value;
        r.MinimumValue = document.getElementById("txtArrival").value;
        r.ControlToValidate = "txtTourDate";
    }
</script>
于 2011-11-18T12:53:37.500 に答える
0

こんにちは、dipslay="dynamic" を削除して、コードが期待どおりに動作するか試してみてください。これにより、最初のクリックでコード ビハインドが呼び出されました。非同期レンダリングに Panel および Telerik コントロールを使用している場合に基本的に発生します。

于 2013-12-11T07:41:22.960 に答える