了解しました。RangeValidator
:
<asp:RangeValidator ID="DateRangeValidator" runat="server" ControlToValidate="DateRange"
ErrorMessage="The date range must be at least 1 day, not more than 30, and neither date can be greater than today's date."
EnableClientScript="true" MinimumValue="1" MaximumValue="30" CssClass="errortext span9 offset2"
Display="Dynamic" />
ご覧のとおり、最小値は1、最大値は30です。
それは隠しフィールドを検証しています(私がテストしているので、現時点では表示されています):
<asp:TextBox ID="DateRange" runat="server" ClientIDMode="Static" />
ご覧のとおり、クライアントIDを静的に設定したので、コントロールは問題なく検出されます。
この非表示フィールドは、2つの日付のいずれかが変更されたときに、このJavaScriptメソッドによって入力されます。
$('.datepicker').change(function () {
var startDate = new Date($('#StartDate').val());
var endDate = new Date($('#EndDate').val());
if (startDate > Date() || endDate > Date()) {
$('#DateRange').val(-1);
}
else {
var nDifference = endDate - startDate;
var one_day = 1000 * 60 * 60 * 24;
$('#DateRange').val(Math.round(nDifference / one_day) + 1);
}
Page_ClientValidate(null);
});
そして、この方法は、正しい日数の差を設定するという観点からは完全に機能しています。
が呼び出されたとき、Page_ClientValidate
バリデーターが期待どおりに起動していることを確認するためにデバッグしました。これは、期待どおりの値を持っています。最小値がチェックされると、1を取得します...そしてそれが8の値と比較されると、期待どおりに評価されます...8は1以上です。
ただし、最大値をチェックすると、最大値として30を取得していても、8の値と比較すると、8が30以下であるという式はfalseと評価されます。
誰かがここで私を助けてくれることを本当に願っています!
ここで8は30以上ですか?