2009-05-04 8 views

Répondre

4

Une option consiste à utiliser un RangeValidator sur la zone de texte du calenderextender est lié. C'est-à-dire si vous avez le TargetID de l'extendeur de calendrier défini sur tb1, ajoutez un rangeValidator pour signaler quand le contenu de tb1 est avant aujourd'hui.

Une autre option utilise javascript et voici un bon exemple: http://www.dotnetcurry.com/ShowArticle.aspx?ID=149 TIP 6.

4

Voici ma solution complète à la date calendrier problème de restriction: Qu'est-ce que J'aime à propos de cette solution est que vous définissez les MinimumValue et MaximumValue d'un RangeValidator et vous n'avez pas à modifier tout javascript. Je n'ai jamais trouvé une solution complète qui n'a pas besoin de recompiler le AjaxControlToolkit.dll. Merci à http://www.karpach.com/ajaxtoolkit-calendar-extender-tweaks.htm pour me donner l'idée de remplacer les méthodes clés dans le fichier calendar.js sans avoir à recompiler le AjaxControlToolkit.dll. En outre, j'ai eu "AjaxControlToolkit est indéfini" erreurs javascript, donc je les ai changé pour Sys.Extended.UI. et cela fonctionne pour moi lors de l'utilisation de la version 4.0 de la boîte à outils.

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

Que ce soit dans Page_Load ou Init ou chaque fois que, définissez les valeurs min et max pour votre gamme validateur:

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

Ajouter ce javascript quelque part dans votre page:

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

Ajouter ce zone de texte à votre page asp.net avec CalendarExtenter et 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

Bonne implémentation. –

1

Utilisation de la boîte à outils Ajax Calendrier Extender dans la balise 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" /> 

Ci-dessus vous verrez que le calendrier ne permet qu'une seule de choisir entre aujourd'hui ou demain en mettant

StartDate = » <% # DateTime.Now%> »

et

EndDate = "#% < DateTime.Now.AddDays (1)%>"

Cela peut aussi se faire dans le back-end en utilisant CalendarExtender1.StartDate = DateTime.Now; ou CalendarExtender1.EndDate = DateTime.Now.AddDays(1);

0

Il suffit d'ajouter un attribut StartDate = "<% # DateTime.Now%>" dans vous ajaxtoolkit contrôle calendarextender

Questions connexes