这是一个用于日期下拉选择的asp.net服务器端控件, 完全开源


  


  在运行的时候还需要一个date.js脚本文件,这个文件来自Microsoft CRM(我稍微做了一些小的改动),因为我看不到服务端的源码,所以只有根据这个脚本文件自己来写服务端的代码了。



  这个控件的特点是简单,js脚本运行较快。另外,可以在输入框中直接输入日期,下拉日期选择框显示时会根据输入框中的日期自动定位到相应的年月日。



  在aspx中用以下语句可定义该控件:


<cc1:calendar id="Calendar1" runat="server" ScriptPath="./script/"></cc1:calendar>



  时间的关系,我只实现了几个基本的属性(如下图1),其中外观部分的属性针对的都是输入框和下拉按钮的部分,日期表格部分的样式没有提供属性设定。



  这里需要注意的是Date属性和ScriptPath属性。


Date属性用来设定或者得到选择的日期(类型为DateTime),比如以下代码将控件的日期设定为当前日期:


Calendar1.Date = DateTime.Now;


下面的代码在服务端获得当前选择的日期:


DateTime dt = Calendar1.Date;


下面的代码在客户端获得当前选择的日期:


var dt = document.getElementById('Calendar1_tbDate').value;


(注意这里的Id组成的格式是:Calendar控件的Id加上“_tbDate”)



ScriptPath属性一般来说必须要设置(默认为“./”),它指明了date.js文件的相对路径,比如ScriptPath="./script/"。(最后的“/”不可省略)。



几张截图:



(图1)




(图2)




(图3)



  点击

这里下载源代码。(其中包含控件的源码及一个示例程序,解压后请将里面的“Tester”文件夹设定为同名的虚拟目录,然后用VS2003打开sln文件,将“Tester”设为启动项目,“WebForm1.aspx”设为启动页,然后运行即可。)



  date.js里其实还有一些东西可以去做,在date.js的头部定义的变量的含义分别是:


ORG_DATE_FORMAT:日期格式,(_sDateFormats数组的索引值)


ORG_DATE_SEPARATOR:年月日之间的分隔符(默认为“-”)


ORG_SHOW_WEEK_NUMBER:默认为“0”表示不显示“周数”列,“1”表示显示。


如果有兴趣的话可以把这些属性也实现到.NET服务端控件的属性里。



  我自己在IE下测试了一下,基本没有什么问题,但是在FireFox下不能正常工作。