9

ajaxToolkit CalendarExtender で使用中に以前の日付を無効にする方法

4

5 に答える 5

4

カレンダーの日付制限の問題に対する私の完全な解決策は次のとおりです。この解決策について私が気に入っているのは、RangeValidatorのMinimumValueとMaximumValueを設定し、JavaScriptを変更する必要がないことです。AjaxControlToolkit.dllを再コンパイルする必要のない完全なソリューションは見つかりませんでした。AjaxControlToolkit.dllを再コンパイルせずにcalendar.jsファイルのキーメソッドをオーバーライドする方法を教えてくれたhttp://www.karpach.com/ajaxtoolkit-calendar-extender-tweaks.htmに感謝します。また、「AjaxControlToolkit is undefined」のJavaScriptエラーが発生したため、これらをSys.Extended.UIに変更しました。4.0バージョンのツールキットを使用すると機能します。

<%--//ADD THIS NEW STYLE TO STYLESHEET TO GRAY OUT DATES THAT AREN'T SELECTABLE--%>
<style type="text/css"> 
    .ajax__calendar_inactive  {color:#dddddd;}
</style>

Page_LoadまたはInitのいずれか、あるいはどこでも、範囲バリデーターの最小値と最大値を設定します。

<script runat="server">
    protected override void OnLoad(EventArgs e)
    {
        //set the validator min and max values
        this.valDateMustBeWithinMinMaxRange.MinimumValue = DateTime.Today.Date.ToShortDateString();
        this.valDateMustBeWithinMinMaxRange.MaximumValue = DateTime.MaxValue.Date.ToShortDateString();
        base.OnLoad(e);
    }
</script>

このJavaScriptをページのどこかに追加します。

<script type="text/javascript">
<%--//   ADD DATE RANGE FEATURE JAVASCRIPT TO OVERRIDE CALENDAR.JS--%>
        var minDate = new Date('<%= valDateMustBeWithinMinMaxRange.MinimumValue %>');
         var maxDate = new Date('<%= valDateMustBeWithinMinMaxRange.MaximumValue %>');
        Sys.Extended.UI.CalendarBehavior.prototype._button_onblur_original = Sys.Extended.UI.CalendarBehavior.prototype._button_onblur;
        //override the blur event so calendar doesn't close
        Sys.Extended.UI.CalendarBehavior.prototype._button_onblur = function (e) {
            if (!this._selectedDateChanging) {
                this._button_onblur_original(e);
            }
        }
        Sys.Extended.UI.CalendarBehavior.prototype._cell_onclick_original = Sys.Extended.UI.CalendarBehavior.prototype._cell_onclick;
        //override the click event
        Sys.Extended.UI.CalendarBehavior.prototype._cell_onclick = function (e) {
            var selectedDate = e.target.date;

            if (selectedDate < minDate || selectedDate > maxDate ) {
                //alert('Do nothing. You can\'t choose that date.');
                this._selectedDateChanging = false;
                return;
            }

            this._cell_onclick_original(e);
        }

        Sys.Extended.UI.CalendarBehavior.prototype._getCssClass_original = Sys.Extended.UI.CalendarBehavior.prototype._getCssClass;
        Sys.Extended.UI.CalendarBehavior.prototype._getCssClass = function (date, part) {

            var selectedDate = date;

           if (selectedDate < minDate || selectedDate > maxDate ) {
                return "ajax__calendar_inactive";
            }
            this._getCssClass_original(date, part);
        }

</script>

このテキストボックスをCalendarExtenterとRangeValidatorを使用してasp.netページに追加します。

<asp:TextBox ID="textBoxDate" runat="server" />
<ajaxToolkit:CalendarExtender ID="calendarExtender" runat="server" TargetControlID="textBoxDate" />
<asp:RangeValidator ID="valDateMustBeWithinMinMaxRange" runat="server" ControlToValidate="textBoxDate"
    ErrorMessage="The date you chose is not in accepted range" Type="Date" />
<br />
<asp:Button ID="Button1" runat="server" Text="Button" />
于 2011-06-14T00:59:28.767 に答える
4

1 つのオプションは、calenderextender がバインドされているテキスト ボックスで rangevalidator を使用することです。つまり、カレンダー エクステンダーの TargetID を tb1 に設定している場合、rangeValidator を追加して、tb1 の内容が今日より前の場合にフラグを立てます。

もう 1 つのオプションは JavaScript を使用することです。これが良い例です: http://www.dotnetcurry.com/ShowArticle.aspx?ID=149ヒント 6.

于 2009-08-18T22:12:26.740 に答える
1

ajaxtoolkit calendarextender コントロールに属性StartDate="<%# DateTime.Now %>"を追加するだけです

于 2015-09-01T07:49:40.203 に答える
-1

次のリンクが役立つ場合があります: CalendarExtenderで日付を無効にする

于 2009-11-06T10:20:27.063 に答える