用于验证asp.net中的开始日期和结束日期的Javascript

时间:2011-09-14 13:16:46

标签: c# javascript asp.net visual-studio

我写了一个JS,应该检查开始日期是否小于结束日期。如果没有,应该抛出警报

JS写成;

function DateValidation(startDate, EndDate) {
                debugger;
                var stdate = startDate;
                var enddate = EndDate;
                if (stdate!= '' && enddate!='') {
                if (stdate > enddate) {
                    alert('Start date cannot be greater than end date');
                    return false;
                }
                else {
                    return true;
                }
               }
            }

当我点击按钮作为“显示报告”时,这个JS会被触发。

我面临的问题

  1. JS未正确验证日期。我错过了什么?我正在从文本框中传递日期

  2. 第一次点击按钮时JS没有启动。第二次点击按钮时会触发

  3. 另外,我已经注册了JS,如下所示;

    btnShowReport.Attributes.Add("onclick", "return DateValidation('" + txtStartDate.Text + "', '" + txtEndDate.Text + "');");
    

    以上代码是否正确?注册JS的正确位置是什么?

    请指导..谢谢!

5 个答案:

答案 0 :(得分:2)

您需要将字符串值解析为日期

if (startDate!= '' && EndDate!='') {  
    var stdate = Date.parse(startDate);   
    var enddate = Date.parse(EndDate);  
    if (stdate > enddate) {   
        alert('Start date cannot be greater than end date');   
        return false;   
    }   
    else
    {   
        return true;   
    }   
} 

如果没有进一步的代码,很难说明为什么你的按钮只会在第二次点击时触发事件。您的按钮是否已禁用?

答案 1 :(得分:2)

使用Date.parse。你正在做的是检查字符串是否大于另一个字符串。

此脚本只会在脚本运行的txtStartDate.TexttxtEndDate.Text 每隔时间内首次采用任何内容。

为什么呢?您还没有正确理解服务器端和客户端执行。

代码中的这一行

btnShowReport.Attributes.Add("onclick", "return DateValidation('" + txtStartDate.Text + "', '" + txtEndDate.Text + "');");

将脚本注册到在这些文本框中传递文本的页面。

您假设每次文本框中的文本更改时,该方法将采用新值并进行日期计算。

然而,假设在加载页面时两个文本框为空,则您的脚本看起来像这样。您可以通过检查页面源来验证这一点。

<inputid="btnShowReport" ... onclick="return DateValidation('','')>

由于JavaScript是在客户端运行的,因此每次都不会与服务器联系以获取这些文本框的当前值。

您可以做的是将自己的文本框传递给方法。像

这样的东西
return DateValidation(txtStartDate.ClientID, txtEndDate.ClientID);

从方法中可以访问它,如下所示

function DateValidation(txtStartDate, txtEndDate) {
                debugger;
                var stdate = Date.parse(txtStartDate.value);

答案 2 :(得分:1)

我认为问题在于你没有比较日期 - 你刚刚宣布它们为var而没有类型,因此它们基本上是String

查看Date.parse()方法。

答案 3 :(得分:0)

添加前两个人回答的内容,你必须解析日期。您还需要验证它们是否为日期。在客户端使用日期时,我经常使用这个库:

http://www.datejs.com/

答案 4 :(得分:0)

主要问题是您如何注册活动。您正在创建一个包含带有值的字符串文字的代码的字符串,这意味着您在创建字符串时从文本框中获取值,而不是在激活事件时。您必须在使用当前值更新代码之前进行回发,这就是为什么它在第一次单击时不起作用。

创建在点击时获取值的代码:

btnShowReport.Attributes.Add("onclick", "return DateValidation(document.getElementById('" + txtStartDate.ClientID + "').value, document.getElementById('" + txtEndDate.ClientID + "').value);");

另一个可能的问题是代码不比较日期,它比较字符串。某些日期格式与字符串相当,例如基于ISO 8601的格式:“2010-12-31”&lt; “2011-01-01”,但是必须将其他日期格式解析为要比较的日期,例如“31/12/2010”&gt; “01/01/2011”。

检查日期是否为空后解析日期:

...
if (startDate != '' && EndDate != '') {
  var stdate = Date.parse(startDate);
  var enddate = Date.parse(EndDate);
  ...