2009-05-04 9 views

Odpowiedz

4

Jedną z opcji jest użycie RangeValidator na polu tekstowym calenderextender jest związany. Tj. Jeśli masz ID celu przedłużenia kalendarza ustawionego na tb1, dodaj zmienną rangeValidator do oznaczenia, gdy zawartość tb1 ma miejsce przed dzisiejszym dniem.

Inną opcją jest za pomocą JavaScript i tutaj jest dobrym przykładem: http://www.dotnetcurry.com/ShowArticle.aspx?ID=149 TIP 6.

4

Oto moje pełne rozwiązanie problemu ograniczenia kalendarza data: Co Podoba mi się to rozwiązanie polegające na ustawieniu wartości minimalnej i maksymalnej wartości zmiennej RangeValidator i nie trzeba modyfikować żadnego javascriptu. Nigdy nie znalazłem pełnego rozwiązania, które nie wymagało rekompilacji pliku AjaxControlToolkit.dll. Dzięki http://www.karpach.com/ajaxtoolkit-calendar-extender-tweaks.htm za udzielenie mi pomysłu na zastąpienie kluczowych metod w pliku calendar.js bez konieczności ponownego kompilowania pliku AjaxControlToolkit.dll. Ponadto mam błędy "AjaxControlToolkit jest niezdefiniowane" javascript, więc zmieniłem je na Sys.Extended.UI. i działa to dla mnie przy korzystaniu z wersji 4.0 zestawu narzędzi.

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

Albo w Page_Load lub Init lub gdziekolwiek, ustaw wartości minimalne i maksymalne dla danego zakresu walidator:

<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> 

Dodaj ten skrypt gdzieś na stronie:

<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> 

Dodaj ten pole tekstowe do strony asp.net z CalendarExtenter i RangeValidator:

<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" /> 
+0

Dobra realizacja. –

1

Korzystanie z Ajax Toolkit kalendarz Extender w znacznikach html:

<asp:TextBox ID="txtDate" runat="server" CssClass="contentfield" Height="16px" MaxLength="12" width="80px" Wrap="False"></asp:TextBox> 
<asp:CalendarExtender ID="CalendarExtender3" runat="server" Enabled="true" StartDate="<%# DateTime.Now %>" EndDate="<%# DateTime.Now.AddDays(1) %>" Format="dd MMM yyyy" PopupButtonID="imgDatePicker" TargetControlID="txtDate"> 
</asp:CalendarExtender> 
<asp:ImageButton ID="imgDatePicker" runat="Server" AlternateText="Click to show calendar" Height="16px" ImageAlign="Middle" ImageUrl="~/images/Calendar_scheduleHS.png" Width="16px" /> 

Powyżej widać, że kalendarz pozwala tylko jeden wybór pomiędzy dziś lub jutro przez ustawienie

startDate =”<% # DateTime.Now%>”

i

DataZakończenia = "<% # DateTime.Now.AddDays (1)%>"

ten może być również wykonane w backend przy użyciu CalendarExtender1.StartDate = DateTime.Now; lub CalendarExtender1.EndDate = DateTime.Now.AddDays(1);

0

Wystarczy dodać atrybut StartDate = "<% # DateTime.Now%>" w tobie ajaxtoolkit calendarextender control