可以去官网查看演示。ModalPopupExtender控件用于实现类似于网页中模式对话框的效果,而CalendarExterder控件则提供日期输入。它有几个重要的属性:TargetControlID:日期输入的目标控件ID,一般是文本框。格式:日期格式,如yyyy-MM-dd。弹出按钮标识:用户打开的日期选择面板的控件标识,如按钮和图片。PopupPosition:设置日期选择面板打开的位置,相对于TargetControlID所在控件的位置。有几个可选值:左下、右下、左下、右下、上左下和上右下。一般来说,我们只需要设置这些属性来满足应用,除非你想自定义日期选择面板的显示样式,那么你需要给自己的CssClass。这里有一个例子。复制的代码如下: ASP : TextBox ID=' TB Begin Time ' Runat=' Server ' CSS Class=' Singletext ' MaxLength=' 10 ' Width=' 90 '/asp: TextBox asp: image ID=' imgBeginTime ' ImageUrl='/upload/2009-11/20091124203311125 . png ' Runat=' Server '/ajaxtoolkit 35这个问题在早期版本中似乎存在。现在新版本已经修复了这个错误。我遇到的问题是在modelbopupextender控件中使用CalendarExtender,日期选择面板将被后者的modelbopupextender阻止。对于ModelPopupExtender的使用,读者可以看一下官网的例子,很简单,这里就不多说了。看问题截图。
看到了吗!日历扩展程序弹出的日期选择面板被后面的模型扩展程序阻止。我在Google上搜索了一些信息,大部分是关于如何重置CalendarExtender控件的样式和指定图层的z-inde属性,但是我的尝试失败了。有说在IE6下测试可以,但是我没有验证,因为现在找不到带IE6的机器。没有环境,我无法衡量。实际上,当您使用Firebug查看FireFox下的页面生成的html时,您会看到ModelPopupExtender样式中的z-index与CalendarExtender中的z-index相同,这可能是Ajax Toolkit控件中的一个bug。所有像这样的控件都应该有这个问题,就是当你在上面打开一个图层时,后面打开的图层会被前面的图层挡住,因为它们的z索引是一样的。如果想让日期输入面板不被后面的“模式对话框”挡住,只能将其z-index设置得大一些,但是简单的css修改没有效果。因为这个日期输入面板是用里面的css动态生成的,所以除非修改控件的源代码,否则提前设置它的样式是没有用的。后来,我在网上找到了一条信息。事实上,CalendarExtender控件有几个可以使用的客户端事件,其中一个是OnClieckShown,它是在日期输入面板打开后触发的,所以我们可以从这里开始,通过脚本设置z-index的值。这是代码。复制代码如下: script type=' text/JavaScript '/确保日历面板显示在顶层。显示的功能日历(发件人,参数){发件人。_弹出行为。_ element . style . zindex=100005;}/script modelbopupextender的z-index值已经很高了,这大概就是控件的设计者担心它会被其他层阻挡的原因。我们将日期选择面板的z-index值设置得稍微高一点,然后在控件中添加OnClientShown='calendarShown ',再次保存并查看页面。
一切都结束了!似乎CalendarExtender控件提供的几个脚本事件仍然非常有用,因此读者可以自己研究其他脚本事件的用途。另外需要注意的是,虽然CalendarExtender控件提供了很好的日期输入功能,但它并不验证目标控件本身的值。例如,在该文本框中,用户可以手动填写内容。此时,CalendarExtender不检查其中的值,除非将文本框设置为只读,那么就会出现另一个问题,那就是用户如何清除其中的值?似乎需要编写自己的代码来验证文本框中的值。结合上面给出的代码,我们可以在文本框中添加一个client on bulr事件,并在它失去焦点时验证该值。以下是用于验证的js代码。复制代码如下:函数检查日期(inobj) {inobj。value=trim (inobj。值);if (Inobj.value!=' '){ var reg=/^d{8}$/;if (Inobj.value.match(reg)!=null){ Inobj . value=Inobj . value . substring(0,4) '-' Inobj.value.substring(4,6) '-' Inobj.value.substring(6,8);} reg=/^([1-2]d{3})-(([1][0-2])|(0?[1-9]))-(([3][0-1])|([1-2][0-9])|(0?[1-9]))$/;if(inobj . value . match(reg)=null){ alert('输入日期的格式不正确!');Inobj.value=inobj . focus();} } }//删除字符串函数trim中的空格{ var s2=for(I=0;长度;i ) { if(s.charAt(i)!=' ')S2=S2 s . charat(I);}返回S2;}然后添加on bulr=' Checkdate(this);'。这样,当用户输入非法值时,程序会提示用户,然后清空该值。