javascript - 使用 Javascript 和 ASP.Net 验证日期

标签 javascript

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

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

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

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

在下面的代码中,当满足前面提到的两个条件时,我尝试使用 __doPostBack 来触发代码隐藏方法。它触发代码隐藏方法,但随后 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" />
<小时/>

请告诉我是否有办法实现这一目标。

谢谢,

最佳答案

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

关于javascript - 使用 Javascript 和 ASP.Net 验证日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9374995/

相关文章:

javascript - 谷歌浏览器中的稳定排序

javascript - React Native 在静态 navigationOptions 中使用 this.props

javascript - 数字运算

javascript - Window.load 仅在浏览器选项卡更改后有效

javascript - 如何发送查询请求而不刷新?

javascript - 自动将参数传递给 res.render nodejs

javascript - dygraphs 图例中的自定义系列顺序

javascript - javascript函数中的jquery不起作用

javascript - 如何使用 Promise 调用函数?

javascript - Vue <template> 标记在迭代列表时未按预期运行