0

一連の日付範囲コントロールがあります。

<div id="CustomDateRow" class="row-fluid" runat="server">
    <label class="span2 FieldLabel">
        Start Date:
    </label>
    <asp:TextBox ID="StartDate" CssClass="datepicker span3" runat="server" ClientIDMode="Static"></asp:TextBox>
    <label class="span2 FieldLabel">
        End Date:
    </label>
    <asp:TextBox ID="EndDate" CssClass="datepicker span3" runat="server" ClientIDMode="Static"></asp:TextBox>
</div>

これらのコントロールをjQueryUIの日付ピッカーに変換しています。

ユーザーが常に30日を超えて選択できないようにする必要があります。もともとは設定時にの設定を計画していたのmaxDateですが、基本的に2つの問題があります。EndDateStartDate

  1. DateTime.AddMonths()JavaScriptには良い類似関数はありません。
  2. このSOの記事は、それが本当にユーザーフレンドリーではないことに気づきました。

したがって、aを使用しRangeValidatorて、値が変更されるたびに2つの日付の間の日数を検証することにしました。

だから、私はRangeValidatorこのようなものを持っています:

<div class="row-fluid">
    <asp:RangeValidator ID="DateRangeValidator" runat="server" ControlToValidate="DateRange"
        ErrorMessage="The date range must be at least one day and not more than thirty."
        EnableClientScript="true" MinimumValue="1" MaximumValue="30" CssClass="errortext span9 offset2"
        Display="Dynamic" />
</div>

そして、それは基本的なテキスト入力コントロールを検証しています:

<asp:TextBox ID="DateRange" runat="server" ClientIDMode="Static" />

日付が変更されるとJavaScriptで更新されます。

$('.datepicker').change(function () {
    var nDifference = Math.abs(new Date($('#StartDate').val()) - new Date($('#EndDate').val()));
    var one_day = 1000 * 60 * 60 * 24;
    $('#DateRange').val(Math.round(nDifference / one_day));
});

問題

jQueryで設定すると値は変わりますが、RangeValidator反応しません。ただし、テキスト入力に値を入力してそのままにしておくと、RangeValidator期待どおりに機能します。

を強制的に実行するために、DateRangeコントロールで何らかのイベントを発生させる必要がありますか?RangeValidator

4

1 に答える 1

1

さて、私はこれを解決するために2つの非常に単純なことをすることになりました、そしてそれはすべて範囲を計算するためのJavaScriptメソッドにありました。これが動作するコードです。

$('.datepicker').change(function () {
    var nDifference = new Date($('#EndDate').val()) - new Date($('#StartDate').val());
    var one_day = 1000 * 60 * 60 * 24;
    $('#DateRange').val(Math.round(nDifference / one_day));
    Page_ClientValidate(null);
});

正または負の実際の差が必要だったのでMath.abs、計算を削除したことに注意してください。nDifference最後に、行を追加したことに注意してください。Page_ClientValidate(null);これにより、RangeValidatorセットアップが検証されます。

完璧に動作します!

于 2012-11-21T19:32:29.860 に答える