如何通过JavaScript为Ajax Calendar Extender控件设置起始日期
解决ASP.NET Ajax Calendar Extender客户端设置起始日期的问题
要通过JavaScript设置Calendar Extender的起始日期,不能直接操作DOM元素的StartDate属性——因为ASP.NET Ajax的Calendar Extender在客户端是作为**Microsoft.Web.UI.WebControls.CalendarBehavior**组件存在的,你需要先获取这个客户端组件实例,再修改它的属性。
正确实现步骤:
- 获取Calendar Extender的客户端组件:通过
Sys.Application.findComponent()方法,传入控件的ClientID来获取组件实例。 - 正确解析日期字符串:由于你的日期格式是
dd/MM/yyyy,直接用new Date()可能会被浏览器错误解析(部分浏览器会把dd/MM识别为MM/dd),需要手动拆分日期字符串来构建正确的Date对象。 - 设置组件的起始日期:调用组件的
set_startDate()方法,或者直接赋值给startDate属性(驼峰式命名)。
修改后的代码:
起始日期TextBox(保留onchange事件):
<asp:TextBox ID="txtFromDate" runat="server" onchange="SetToDate();"></asp:TextBox>
JavaScript函数:
function SetToDate() { // 获取起始日期输入框的值 var fromDateStr = document.getElementById('<%= txtFromDate.ClientID %>').value; if (!fromDateStr) return; // 为空时不处理 // 解析dd/MM/yyyy格式的日期字符串为Date对象 var dateParts = fromDateStr.split('/'); // 注意:月份是0-based,所以要减1 var startDate = new Date(dateParts[2], dateParts[1] - 1, dateParts[0]); // 获取结束日期Calendar Extender的客户端组件 var calToDate = Sys.Application.findComponent('<%= calToDate.ClientID %>'); if (calToDate) { // 设置起始日期 calToDate.set_startDate(startDate); // 或者直接赋值:calToDate.startDate = startDate; } }
额外说明:
- 确保页面已经加载完成ASP.NET Ajax框架,所以这个函数要在
Sys.Application.load事件之后执行,或者直接放在页面底部(ASP.NET Ajax脚本之后)。 - 如果你的Calendar Extender有
PopupButtonID,点击按钮弹出日历的时候,也会应用新设置的起始日期限制。
内容的提问来源于stack exchange,提问作者altaaf.hussein
相关产品推荐
相关产品推荐

