验证日期使用Javascript& ASP.Net

时间:2012-02-21 09:25:04

标签: javascript

我有一个ASP.Net表单,用户可以从Calendar Extender控件中选择日期,我有2个日期字段(FromDate& ToDate)。

我想使用javascript验证以下内容:

  • FromDate应始终小于ToDate
  • FromDate& ToDate不应低于今天的日期。

如果两个条件都为真,我希望从代码隐藏中调用一个方法,该方法将计算选定时间段内的总天数(不包括周末)并将其显示给用户(此方法可以正常工作)。

在下面的代码中,我尝试了__doPostBack,以便在满足前面提到的两个条件时触发codebehind方法。它触发了codebehind方法,但随后javascript变量变得不正确(compareDate变量总是在每个函数调用和回发时递增),因此所有结果都变得不正确。

* 以下是我用于使用Javascript验证日期的当前方法,它是从两个文本框的日历扩展程序控件*

中的OnClientDateSelectionChanged事件中触发的
<script type="text/javascript">

        var fromDate = new Date();
        var toDate = new Date();

        function checkDate(sender, args) {

            if (sender.get_id() == 'CalendarExtenderFrom') {
                fromDate = sender._selectedDate;
            }
            else if (sender.get_id() == 'CalendarExtenderTo') {
                toDate = sender._selectedDate;
            }

            // Check if selected date is less than today's date
            var todayDate = new Date();
            var year = todayDate.getFullYear();
            var month = todayDate.getMonth();
            var day = todayDate.getDate();
            var dateOnly = new Date(year, month, day);

            if (sender._selectedDate < dateOnly) {
               alert("You cannot select a day earlier than today!");
               sender._textbox.set_Value("");
               return;
            }

            // Check if FromDate > ToDate
            if (document.getElementById('TextBoxDateOfLeave').value != "" && document.getElementById('TextBoxDateOfReturn').value != "") {

                var compareDate = new Date(fromDate.getFullYear(), fromDate.getMonth(), (fromDate.getDate()) + 1, 00, 00, 00, 00);

                if (toDate < compareDate) {

                   alert("(Return Date) should be greater than (Travel Date)");
                   sender._textbox.set_Value("");
                   return;
                }

            }

            // If both conditions are met
            window.__doPostBack('__Page', '');
        }

    </script>

ASP.Net控制:

<asp:TextBox ID="TextBoxDateOfLeave" runat="server" ClientIDMode="Static" ontextchanged="CalculateLeaveDays"></asp:TextBox>
<asp:CalendarExtender ID="CalendarExtenderFrom" runat="server" Enabled="True" Format="dd/MMM/yyyy" TargetControlID="TextBoxDateOfLeave" OnClientDateSelectionChanged="checkDate" />

<asp:TextBox ID="TextBoxDateOfReturn" runat="server" ClientIDMode="Static" ontextchanged="CalculateLeaveDays"></asp:TextBox>
<asp:CalendarExtender ID="CalendarExtenderTo" runat="server" Enabled="True" Format="dd/MMM/yyyy" TargetControlID="TextBoxDateOfReturn" OnClientDateSelectionChanged="checkDate" />

如果有办法实现这一点,请告诉我。

谢谢,

1 个答案:

答案 0 :(得分:0)

你在找这样的东西吗?我在这里添加了Fiddle。我使用了jquery ui日期选择器,但您可以使用您选择的任何日期选择器,前提是值为'yyyy / mm / dd'或'mm / dd / yyyy'我认为