2009-05-04 30 views

Trả lời

4

Một lựa chọn là sử dụng một RangeValidator trên textbox các calenderextender là ràng buộc để. Tức là nếu bạn có TargetID của bộ mở rộng lịch được đặt thành tb1, hãy thêm một dải ôValidator để gắn cờ khi nội dung của tb1 trước ngày hôm nay.

Một lựa chọn khác là sử dụng javascript và đây là một ví dụ điển hình: http://www.dotnetcurry.com/ShowArticle.aspx?ID=149 TIP 6.

4

Đây là giải pháp đầy đủ của tôi đến ngày vấn đề lịch hạn chế: Điều gì Tôi thích về giải pháp này là bạn đặt MinimumValue và MaximumValue của một RangeValidator và bạn không phải sửa đổi bất kỳ javascript. Tôi không bao giờ tìm thấy một giải pháp đầy đủ mà không yêu cầu biên dịch lại AjaxControlToolkit.dll. Cảm ơn http://www.karpach.com/ajaxtoolkit-calendar-extender-tweaks.htm vì đã cho tôi ý tưởng về cách ghi đè các phương thức chính trong tệp calendar.js mà không phải biên dịch lại AjaxControlToolkit.dll. Ngoài ra, tôi đã nhận "AjaxControlToolkit là không xác định" javascript lỗi, vì vậy tôi đã thay đổi những người Sys.Extended.UI. và nó hoạt động cho tôi khi sử dụng phiên bản 4.0 của bộ công cụ.

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

Hoặc trong Page_Load hoặc Init hoặc bất cứ nơi nào, thiết lập min và giá trị tối đa cho phạm vi validator của bạn:

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

Thêm javascript này ở đâu đó trong trang của bạn:

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

Thêm này hộp văn bản tới trang asp.net của bạn với CalendarExtenter và 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

Triển khai tốt. –

1

Sử dụng Ajax toolkit Lịch Extender trong đánh dấu 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" /> 

Ở trên bạn sẽ thấy rằng lịch chỉ cho phép một để lựa chọn giữa ngày hôm nay hoặc ngày mai bằng cách thiết lập

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

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

này cũng có thể được thực hiện trong backend sử dụng CalendarExtender1.StartDate = DateTime.Now; hoặc CalendarExtender1.EndDate = DateTime.Now.AddDays(1);

0

Chỉ cần thêm một thuộc tính StartDate = "<% # DateTime.Now%>" trong bạn điều khiển calendarextender ajaxtoolkit

Các vấn đề liên quan