C# 在asp.net中验证开始日期和结束日期的Javascript

C# 在asp.net中验证开始日期和结束日期的Javascript,c#,javascript,asp.net,visual-studio,C#,Javascript,Asp.net,Visual Studio,我写了一个JS,应该检查开始日期是否小于结束日期。如果不是,则应抛出警报 JS写为: function DateValidation(startDate, EndDate) { debugger; var stdate = startDate; var enddate = EndDate; if (stdate!= '' && enddate!='')

我写了一个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被触发

我面临的问题

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

当第一次单击按钮时,JS不会启动。当第二次单击按钮时,它将激发

另外,我已经注册了JS如下

btnShowReport.Attributes.Add("onclick", "return DateValidation('" + txtStartDate.Text + "', '" + txtEndDate.Text + "');");
上面的代码正确吗?注册JS的正确位置是什么


请导游。。谢谢

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

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;   
    }   
} 
如果没有进一步的代码,很难解释为什么您的按钮只在第二次单击时触发事件。您的按钮是否已禁用以开始?

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

此外,每次脚本运行时,脚本将只获取第一次在txtStartDate.Text、txtEndDate.Text中存在的内容

为什么??您尚未正确理解服务器端和客户端执行

代码中的这一行

btnShowReport.Attributes.Add("onclick", "return DateValidation('" + txtStartDate.Text + "', '" + txtEndDate.Text + "');");
将脚本注册到在这些文本框中传递文本的页面

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

但是,如果在加载页面时两个文本框为空,则脚本看起来是这样的。您可以通过检查页面源来验证这一点

<inputid="btnShowReport" ... onclick="return DateValidation('','')>
通过该方法,您可以访问它,如下所示

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

我认为问题在于你没有比较日期——你只是把它们声明为没有类型的变量,所以它们本质上是字符串


查看Date.parse方法。

除了前面两个家伙的回答之外,你还需要解析日期。您还需要验证它们是否为偶数日期。在客户端处理日期时,我经常使用此库:


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

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

btnShowReport.Attributes.Add("onclick", "return DateValidation(document.getElementById('" + txtStartDate.ClientID + "').value, document.getElementById('" + txtEndDate.ClientID + "').value);");
另一个可能的问题是代码不比较日期,而是比较字符串。一些日期格式可以作为字符串进行比较,例如基于ISO 8601的格式:2010-12-31<2011-01-01,但其他日期格式必须解析为要比较的日期,例如31/12/2010>01/01/2011

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

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

根据您在第一段中提到的评论,您的意思是我需要在页面加载事件中注册JS吗?@Xor power:在服务器代码中的何处添加属性并不重要。在页面被发送到浏览器并解析为HTML代码之前,它只是一个字符串。重要的是字符串中的更改,它从页面中的元素中获取值,而不是使用文字字符串。使用date.parse时,开始日期为1294770600000。答案写得非常快。我对任何错误表示歉意。如果您有任何问题,请随时提问。您需要像编写上一个函数一样编写该函数。不需要单引号。按钮每次都会触发事件,但它使用的是创建页面时的值,而不是字段中的当前值。那么解决方案是什么?日期,我成功了!但一旦按下按钮,警报就会触发。
...
if (startDate != '' && EndDate != '') {
  var stdate = Date.parse(startDate);
  var enddate = Date.parse(EndDate);
  ...