2009-05-04 13 views

risposta

4

una possibilità è quella di utilizzare un RangeValidator sulla casella di testo del calenderextender è destinata a. Cioè se avete il TargetID dell'estensione del calendario impostato su tb1 aggiungete un rangeValidator a flag quando il contenuto di tb1 è prima di oggi.

Un'altra opzione è l'uso di JavaScript ed ecco un buon esempio: http://www.dotnetcurry.com/ShowArticle.aspx?ID=149 TIP 6.

4

Qui è la mia piena soluzione del problema data del calendario restrizione: Cosa Mi piace questa soluzione è che si imposta il MinimumValue e MaximumValue di un RangeValidator e non è necessario modificare qualsiasi javascript. Non ho mai trovato una soluzione completa che non richiedesse la ricompilazione di AjaxControlToolkit.dll. Grazie a http://www.karpach.com/ajaxtoolkit-calendar-extender-tweaks.htm per avermi dato l'idea di come sovrascrivere i metodi chiave nel file calendar.js senza dover ricompilare AjaxControlToolkit.dll. Inoltre, ho ricevuto "AjaxControlToolkit è indefinito" errori javascript, quindi li ho modificati in Sys.Extended.UI. e funziona per me quando si utilizza la versione 4.0 del toolkit.

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

Sia in Page Load o Init o dovunque, impostare i valori minimi e massimi per l'intervallo validatore:

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

Aggiungi questa javascript da qualche parte nella tua pagina:

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

Aggiungere questo casella di testo per la tua pagina asp.net con CalendarExtenter e 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

Buona implementazione. –

1

Utilizzando l'Ajax toolkit Calendario Extender nel markup 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" /> 

Sopra vedrete che il calendario consente a un solo di scegliere tra oggi o domani impostando

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

e

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

Questo può anche essere fatto nel back-end utilizzando CalendarExtender1.StartDate = DateTime.Now; o CalendarExtender1.EndDate = DateTime.Now.AddDays(1);

0

Basta aggiungere un attributo StartDate = "<% # DateTime.Now%>" in voi ajaxtoolkit controllo calendarextender

Problemi correlati