【问题标题】:CalendarExtender with two digit year带有两位数年份的 CalendarExtender
【发布时间】:2014-09-24 15:25:40
【问题描述】:

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

代码如下:

<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>

【问题讨论】:

  • 我没有使用CalendarExtender,所以只是提供一些想法。有一个 Format 属性,尝试设置为 Format="M/dd/yy"
  • 我改成 Format = "M/dd/yy",但是当用户输入 4 位数年份时,calendarExtender 无法识别。

标签: asp.net


【解决方案1】:

http://forums.asp.net/t/1391032.aspx 的解决方案是添加客户端功能来解决此问题。您应该添加MaskedEditExtenderMaskedEditValidator 并设置ClientValidationFunction。此外,您可能需要将txtDateTime 文件的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>

【讨论】:

    猜你喜欢
    • 2018-03-21
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    相关资源
    最近更新 更多