【问题标题】:ASP.NET CustomValidator with ClientValidationFunction not Firing if validation fails如果验证失败,则带有 ClientValidationFunction 的 ASP.NET CustomValidator 不会触发
【发布时间】:2011-05-30 11:19:43
【问题描述】:

我正在使用 customvalidator 验证日期,但效果不佳,谁能告诉我原因

这是我的 .aspx

    <script type="text/javascript">

function monthDiff(d1, d2) {
    var months;
    months = (d2.getFullYear() - d1.getFullYear()) * 12;
    months -= d1.getMonth() + 1;
    months += d2.getMonth();
    return months;
}

function difference(d1,d2){

var hiredate,dob;
var diff=18*12;
hiredate=document.getElementById(d1).value;
dob=document.getElementById(d2).value;
var months=monthDiff(hiredate,dob);
if(diff<=months)
{
return true;
//true
}
else
{
return false;
//false
}
}

function validatehiredate(value, arg) {
                arg.IsValid = (difference('ctl00_ContentPlaceHolder1_txtHiredate','ctl00_ContentPlaceHolder1_txtDateofBirth'));
            }
</script>

 <asp:TextBox id="txtHiredate" runat="server" />
 <asp:TextBox id="txtDateofBirth" runat="server" />
 <asp:CustomValidator ID="CustomValidator1" runat="server" ClientValidationFunction="validatehiredate" ControlToValidate="txtDateofBirth" ValidationGroup="personal" Display="Dynamic" ValidateEmptyText="True">can not hire guy less than 18 yrs</asp:CustomValidator>

谁能告诉我这有什么问题

【问题讨论】:

  • 如果我选择或给出相等的日期,它不会触发任何验证
  • 所以它永远不会触发验证,还是只会在日期不同时触发验证?
  • 你试过没有验证组吗?
  • 它不会因为我使用验证组的任何人而触发

标签: asp.net customvalidator


【解决方案1】:

将您的monthDiff函数更改为以下内容:

 function monthDiff(d1, d2) {
        var months;
        var date1 = new Date(d1);
        var date2 = new Date(d2);

        months = (date2.getFullYear() - date1.getFullYear()) * 12;
        months -= date1.getMonth() + 1;
        months += date2.getMonth(); return months;
       }

您不能在日期对象以外的任何对象上使用 getFullYeargetMonth

我将假设您的浏览器正在抛出一个 javascript 错误,它只是没有弹出

编辑

        function getDays(d1, d2) {
            var months;
            var date1 = new Date(d1);
            var date2 = new Date(d2);
            return (date2 - date1) / (1000 * 60 * 60 * 24);
            return months;
        }

        //function getLeapYear

        function difference(d1, d2) 
        {
            var hiredate, dob; var diff = 18 * 12;
            hiredate = document.getElementById(d1).value;
            dob = document.getElementById(d2).value;
            var Age = getDays(hiredate, dob);
            var compareVal = 365 * 18; //getCompareVal(hiredate,dob);

            if (Age >= compareVal) {
                return true;
                //true
            } else {
                return false; //false
            }
        }

【讨论】:

  • 嘿,但如果我选择年龄大于 18 岁,它也会触发
  • 我认为年份功能也有必要改变一下,你可以检查一次吗
  • TBohnen.jnr 嗨,伙计,你在吗
  • 是的,对不起,我正在考虑改变你的做法,目前你只使用年份和月份,如果你使用更精确的方法应该会更好,会更新现在编码
  • 好的,所以用我的 getdays 更改你的monthDiff,然后更新差异函数。唯一的问题是你仍然需要减去闰年,我现在将创建一个函数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多