一連の日付範囲コントロールがあります。
<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つの問題があります。EndDate
StartDate
DateTime.AddMonths()
JavaScriptには良い類似関数はありません。- この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