使用CompareValidator和CalenderExtender与不支持的日期格式 [英] Using CompareValidator and CalenderExtender with unsupported date-format

查看:146
本文介绍了使用CompareValidator和CalenderExtender与不支持的日期格式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个形式的开始日期和结束日期字段。我已指定压延扩展格式。自那以后,比较验证器不工作。它总是显示错误消息。请帮忙。我需要显示格式的日期周五2012年5月04。

开始日期字段:

 < ASP:文本框ID =txtStartDate只读=真=服务器
    的CssClass =textBoxWidth TPRValue文本='<%#DataBinder.Eval的(的Container.DataItem,起始日期,{0:DDD MM DD,YYYY})%GT;'>
< / ASP:文本框>
< ASP:ImageButton的ID =imgBtnStartDate=服务器的ImageUrl =〜/通用/图片/ Calendar.GIF的CausesValidation =false的ImageAlign =AbsMiddle/>
< AJAX:CalendarExtender ID =StartDateCalendar的TargetControlID =txtStartDatePopupButtonID =imgBtnStartDate=服务器
    格式=DDD MM DD,YYYY>
< / AJAX:CalendarExtender>
< ASP:CompareValidator ID =startDateCompareValidator=服务器的ControlToValidate =txtStartDateControlToCompare =txtEndDate启用=真
    类型=日期显示=动态运算符=LessThanEqual
    文本=开始日期应该是< =结束日期>
< / ASP:CompareValidator>

结束日期字段:

 < ASP:文本框ID =txtEndDate只读=真=服务器
    的CssClass =textBoxWidth TPRValue文本='<%#DataBinder.Eval的(的Container.DataItem,结束日期,{0:DDD MM DD,YYYY})%GT;'>
< / ASP:文本框>
< ASP:ImageButton的ID =imgBtnEndDate=服务器的ImageUrl =〜/通用/图片/ Calendar.GIF的CausesValidation =false的ImageAlign =AbsMiddle/>
< AJAX:CalendarExtender ID =EndDateCalendar的TargetControlID =txtEndDatePopupButtonID =imgBtnEndDate=服务器
    格式=DDD MM DD,YYYY>
< / AJAX:CalendarExtender>

比较验证:

 < ASP:CompareValidator ID =startDateCompareValidator=服务器的ControlToValidate =txtStartDate
    ControlToCompare =txtEndDate启用=真类型=日期显示=动态运算符=LessThanEqual
    文本=开始日期应该是< =结束日期>
< / ASP:CompareValidator>


解决方案

我假设 CompareValidator 不接受您的格式。

该CompareValidator为pretty讲究它将接受的日期。例如,下面的日期不被视为有效:


  • 2001年1月1日,

  • 2001年1月1日

  • 周五2012 5月4日

该CompareValidator需要看起来像这样的日期:


  • 1/1/2001

  • 2001年1月1日

  • 5/4/2012

http://www.informit.com/articles/ article.aspx p = 25461&放大器; SEQNUM = 5

无需测试它,你可以尝试使用一个隐藏的文本框(显示:无)所接受的日期格式为文本。然后设置验证的的ControlToValidate 将hiddenfield。你需要两个文本框Text属性与hiddenfields同步。也许这给你的想法。

修改:好吧,我试图得到它的工作我说的话,实际上它是工作:)
也许有一些重构可能的,但看看自己。

要隐藏与上述任职日期格式我使用CSS文本框:

 <风格类型=文/ CSS>
    。隐
    {
        显示:无;
    }
< /风格>

当用户通过CalendarExtenders更改日期这些JS-函数的调用:

 <脚本类型=文/ JavaScript的>
    功能dateChangedStart(发件人,参数){
        变种selectedDate = sender.get_selectedDate();
        变种hiddenStart = $的get(txtStartDateHidden);
        VAR验证= $ GET(startDateCompareValidator);
        hiddenStart.value = dateToString(selectedDate);
        ValidatorValidate(验证);
    }
    功能dateChangedEnd(发件人,参数){
        变种selectedDate = sender.get_selectedDate();
        变种hiddenEnd = $的get(txtEndDateHidden);
        VAR验证= $ GET(startDateCompareValidator);
        hiddenEnd.value = dateToString(selectedDate);
        ValidatorValidate(验证);
    }
    功能dateToString(D){
        VAR年= d.getFullYear();
        变种月= d.getMonth()+ 1; //月份是从零开始
        VAR天= d.getDate();
        年回报+/+月+/+天;
    }
< / SCRIPT>

这是样本页面的其余部分:

 < D​​IV>
    < ASP:文本框ID =txtStartDate的CausesValidation =false的只读=真=服务器>
    < / ASP:文本框>
    < ASP:文本框ID =txtStartDateHidden的CssClass =隐藏的ValidationGroup =DateCheck的CausesValidation =真正的只读=假=服务器>
    < / ASP:文本框>
    < AJAX:CalendarExtender ID =StartDateCalendar的TargetControlID =txtStartDate=服务器
        OnClientDateSelectionChanged =dateChangedStart
        格式=DDD MM DD,YYYY>
    < / AJAX:CalendarExtender>
    < ASP:CompareValidator ID =startDateCompareValidator=服务器EnableClientScript =真
        的ControlToValidate =txtStartDateHidden显示=静态操作员=LessThanEqual的ValidationGroup =DateCheck
        ControlToCompare =txtEndDateHidden启用=真类型=日期文本=开始日期应该是< =结束日期>
    < / ASP:CompareValidator>
    < ASP:文本框ID =TxtEndDate的CausesValidation =false的只读=真=服务器>
    < / ASP:文本框>
    < ASP:文本框ID =txtEndDateHidden的CssClass =隐藏的ValidationGroup =DateCheck的CausesValidation =真正的只读=假=服务器>
    < / ASP:文本框>
    < AJAX:CalendarExtender ID =EndDateCalendar的TargetControlID =txtEndDate=服务器
        OnClientDateSelectionChanged =dateChangedEnd
        格式=DDD MM DD,YYYY>
    < / AJAX:CalendarExtender>
    < ASP:按钮的ID =btnSubmit按钮的CausesValidation =真的ValidationGroup =DateCheck=服务器文本=提交/>
< / DIV>

I have a start date and end date field in a form. I have specified format for calender extender. since then, the compare validator is not working. It is always displaying the error message. Please help. I need to show the date in the format "Fri 04 May 2012".

Start date field:

<asp:TextBox ID="txtStartDate" ReadOnly="true" runat="server" 
    CssClass="textBoxWidth TPRValue" Text='<%#DataBinder.Eval(Container.DataItem, "StartDate", "{0: ddd MM dd, yyyy}")%>'>
</asp:TextBox>
<asp:ImageButton ID="imgBtnStartDate" runat="server" ImageUrl="~/Common/Images/Calendar.GIF" CausesValidation="false" ImageAlign="AbsMiddle" />
<ajax:CalendarExtender ID="StartDateCalendar" TargetControlID="txtStartDate" PopupButtonID="imgBtnStartDate" runat="server" 
    Format="ddd MM dd, yyyy">
</ajax:CalendarExtender>
<asp:CompareValidator ID="startDateCompareValidator" runat="server" ControlToValidate="txtStartDate" ControlToCompare="txtEndDate" Enabled="true" 
    Type="Date" Display="Dynamic" Operator="LessThanEqual"
    Text="Startdate should be <= enddate">
</asp:CompareValidator>

EndDate field:

<asp:TextBox ID="txtEndDate" ReadOnly="true" runat="server" 
    CssClass="textBoxWidth TPRValue" Text='<%#DataBinder.Eval(Container.DataItem, "EndDate", "{0: ddd MM dd, yyyy}")%>'>
</asp:TextBox>
<asp:ImageButton ID="imgBtnEndDate" runat="server" ImageUrl="~/Common/Images/Calendar.GIF" CausesValidation="false" ImageAlign="AbsMiddle" />
<ajax:CalendarExtender ID="EndDateCalendar" TargetControlID="txtEndDate" PopupButtonID="imgBtnEndDate" runat="server" 
    Format="ddd MM dd, yyyy">
</ajax:CalendarExtender>

Compare validator:

<asp:CompareValidator ID="startDateCompareValidator" runat="server" ControlToValidate="txtStartDate" 
    ControlToCompare="txtEndDate" Enabled="true" Type="Date" Display="Dynamic" Operator="LessThanEqual"
    Text="Startdate should be <= enddate">
</asp:CompareValidator>

解决方案

I assume that the CompareValidator does not accept your format.

The CompareValidator is pretty particular about the dates that it will accept. For example, the following dates are not considered valid:

  • January 1, 2001
  • Jan 1, 2001
  • Fri 04 May 2012

The CompareValidator requires a date that looks like this:

  • 1/1/2001
  • 1-1-2001
  • 5/4/2012

http://www.informit.com/articles/article.aspx?p=25461&seqNum=5

Without having tested it, you could try to use a hidden TextBox(display:none) with the accepted date format as Text. Then set the Validator's ControlToValidate to the "hiddenfield". You need to synchronize both TextBoxes' Text properties with their hiddenfields. Maybe this gives you an idea.

Edit: Ok, i've tried to get it working what i've said and actually it is working :) Maybe there's some refactoring possible, but have a look yourself.

To hide the TextBox with the working date format i've used CSS:

<style type="text/css">
    .hidden
    {
        display:none;   
    }
</style>

These JS-functions are called when the user changes a date via CalendarExtenders:

<script type="text/javascript">
    function dateChangedStart(sender, args) {
        var selectedDate = sender.get_selectedDate();
        var hiddenStart = $get("txtStartDateHidden");
        var validator = $get("startDateCompareValidator");
        hiddenStart.value = dateToString(selectedDate);
        ValidatorValidate(validator);
    }
    function dateChangedEnd(sender, args) {
        var selectedDate = sender.get_selectedDate();
        var hiddenEnd = $get("txtEndDateHidden");
        var validator = $get("startDateCompareValidator");
        hiddenEnd.value = dateToString(selectedDate);
        ValidatorValidate(validator);
    }
    function dateToString(d) {
        var year = d.getFullYear();
        var month = d.getMonth() + 1; //months are zero based
        var day = d.getDate();
        return year + "/" + month + "/" + day;
    }
</script>

This is the rest of the sample page:

<div>
    <asp:TextBox ID="txtStartDate" CausesValidation="false" ReadOnly="true" runat="server">
    </asp:TextBox>
    <asp:TextBox ID="txtStartDateHidden" CssClass="hidden" ValidationGroup="DateCheck" CausesValidation="true" ReadOnly="false" runat="server">
    </asp:TextBox>
    <ajax:CalendarExtender ID="StartDateCalendar" TargetControlID="txtStartDate" runat="server"
        OnClientDateSelectionChanged="dateChangedStart"
        Format="ddd MM dd, yyyy">
    </ajax:CalendarExtender>
    <asp:CompareValidator ID="startDateCompareValidator" runat="server" EnableClientScript="true"
        ControlToValidate="txtStartDateHidden" Display="Static" Operator="LessThanEqual" ValidationGroup="DateCheck"
        ControlToCompare="txtEndDateHidden" Enabled="true" Type="Date" Text="Startdate should be <= enddate">
    </asp:CompareValidator>
    <asp:TextBox ID="TxtEndDate" CausesValidation="false" ReadOnly="true" runat="server">
    </asp:TextBox>
    <asp:TextBox ID="txtEndDateHidden" CssClass="hidden" ValidationGroup="DateCheck" CausesValidation="true" ReadOnly="false" runat="server">
    </asp:TextBox>
    <ajax:CalendarExtender ID="EndDateCalendar" TargetControlID="txtEndDate" runat="server"
        OnClientDateSelectionChanged="dateChangedEnd"
        Format="ddd MM dd, yyyy">
    </ajax:CalendarExtender>
    <asp:Button ID="BtnSubmit" CausesValidation="true" ValidationGroup="DateCheck" runat="server" Text="Submit" />
</div>

这篇关于使用CompareValidator和CalenderExtender与不支持的日期格式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆