2014-09-24 55 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> 
相關問題