2014-09-24 56 views
1

需要用户可以在文本框中输入日期或使用日历选择日期。我使用了一个文本框,其中用户输入日期和范围验证器(类型是日期)来验证用户的输入,日历扩展器作为日历,以及弹出日历的按钮。当用户输入两位数年份(如9/24/11)时,rangvalidator认为是有效日期,但是当我点击按钮时,日历扩展程序显示今天。我如何让日历扩展程序跳转到正确的日期(9/24/2011)?带有两位数字年份的CalendarExtender

下面是代码:

<div style="display:inline-table"> 
    <div style="vertical-align:middle"> 
     <asp:TextBox ID="txtDateTime" runat="server" CssClass="calInput" MaxLength="10" placeholder="MM/dd/yyyy"></asp:TextBox> 
     <asp:ImageButton ID="imgBtnShowCalendar" runat="server" 
      CssClass="calInput calImg" ImageUrl="~/images/calendar.gif" 
      onclick="imgBtnShowCalendar_Click" /> 
    </div> 
    <cc1:CalendarExtender ID="CalendarExtender1" runat="server" Animated="false" Format="MM/dd/yyyy" TargetControlID="txtDateTime" PopupButtonID="imgBtnShowCalendar"> 
    </cc1:CalendarExtender> 
    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
     ControlToValidate="txtDateTime" Display="Dynamic" 
     ErrorMessage="RequiredFieldValidator" Font-Names="Arial" Font-Size="12px" 
     ForeColor="Red"></asp:RequiredFieldValidator> 
    <asp:RangeValidator ID="RangeValidator1" MinimumValue="1/1/1900" 
     MaximumValue="6/6/2079" Type="Date" ControlToValidate="txtDateTime" 
     runat="server" ErrorMessage="RangeValidator" Display="Dynamic" 
     Font-Names="Arial" Font-Size="12px" ForeColor="Red"></asp:RangeValidator> 
</div> 
+0

我没有使用CalendarExtender,所以只是给一些想法。 有一个格式属性,尝试设置为 Format =“M/dd/yy” – 2014-09-25 02:37:45

+0

我更改为Format =“M/dd/yy”,但是当用户输入4位数年份时,calendarExtender无法识别。 – 2014-09-25 07:39:50

回答

1

将溶液从http://forums.asp.net/t/1391032.aspx是添加客户端功能来解决这个问题。您应该添加MaskedEditExtenderMaskedEditValidator并设置ClientValidationFunction。您也可能需要将txtDateTime fileld的ClientIDMode属性设置为Static

<div style="display:inline-table"> 

    <%-- ... --%> 

    <asp:TextBox ID="txtDateTime" runat="server" ClientIDMode="Static" CssClass="calInput" MaxLength="10" placeholder="MM/dd/yyyy"></asp:TextBox> 

    <%-- ... --%> 

    <%-- all yours previous code goes here --%> 

    <script type="text/javascript"> 
     function FixCentury(sender, args) { 
      // the current value is saved as args.Value; 
      // you can modify the method of changing the value yourself. 
      var year = args.Value.split("/")[2]; 
      if (year.substr(0, 2) == "00") { 
       var newyear = "20" + year.substr(2, 2); 
       document.getElementById("txtDateTime").value = args.Value.substr(0, 6) + newyear; 
      } 
     } 
    </script> 
    <cc1:MaskedEditExtender ID="MaskedEditExtender1" runat="server" TargetControlID="txtDateTime" 
     MaskType="Date" Mask="99/99/9999" Century="2100" AutoComplete="true"> 
    </cc1:MaskedEditExtender> 
    <cc1:MaskedEditValidator ID="MaskedEditValidator1" runat="server" ControlExtender="MaskedEditExtender1" 
     ControlToValidate="txtDateTime" IsValidEmpty="false" InvalidValueMessage="Check date!" 
     InvalidValueBlurredMessage="Check date!" Display="Dynamic" ClientValidationFunction="FixCentury" /> 
</div> 
相关问题