如何在 ajaxToolkit CalendarExtender 中使用时禁用以前的日期
5 回答
一种选择是在 calenderextender 绑定到的文本框上使用 rangevalidator。即,如果您将日历扩展器的 TargetID 设置为 tb1,则添加一个 rangeValidator 以标记 tb1 的内容何时在今天之前。
另一种选择是使用 javascript,这是一个很好的例子: http ://www.dotnetcurry.com/ShowArticle.aspx?ID= 149 TIP 6。
这是我对日历日期限制问题的完整解决方案:我喜欢这个解决方案的地方是您设置 RangeValidator 的 MinimumValue 和 MaximumValue,并且您不必修改任何 javascript。我从未找到不需要重新编译 AjaxControlToolkit.dll 的完整解决方案。感谢http://www.karpach.com/ajaxtoolkit-calendar-extender-tweaks.htm让我知道如何在不重新编译 AjaxControlToolkit.dll 的情况下覆盖 calendar.js 文件中的关键方法。此外,我收到“AjaxControlToolkit 未定义”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" />
在 html 标记中使用 Ajax 工具包 Calendar Extender:
<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" />
上面你会看到日历只允许一个人通过设置在今天或明天之间进行选择
StartDate="<%# DateTime.Now %>"
和
EndDate="<%# DateTime.Now.AddDays(1) %>"
这也可以在后端使用CalendarExtender1.StartDate = DateTime.Now;
或CalendarExtender1.EndDate = DateTime.Now.AddDays(1);
只需在 ajaxtoolkit calendarextender 控件中添加一个属性StartDate="<%# DateTime.Now %>"
以下链接可能对您有所帮助: 在 CalendarExtender 中禁用日期