ASP.NET CustomValidator с ClientValidationFunction не срабатывает, если проверка не удалась

Я проверяю дату с помощью 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>

Может ли кто-нибудь сказать, что не так в этом


person Developer    schedule 30.05.2011    source источник
comment
Если я выбираю или указываю даты равными, это не запускает никакой проверки   -  person Developer    schedule 30.05.2011
comment
То есть он никогда не запускает проверку или запускает проверку только тогда, когда даты не совпадают?   -  person TBohnen.jnr    schedule 30.05.2011
comment
Вы пробовали это без группы проверки?   -  person TBohnen.jnr    schedule 30.05.2011
comment
Он не срабатывает ни для кого, я тоже использовал группу проверки   -  person Developer    schedule 30.05.2011


Ответы (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;
       }

вы не можете использовать getFullYear или getMonth ни для чего, кроме объектов даты.

Я собираюсь сделать предположение, что ваш браузер выдает ошибку 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
            }
        }
person TBohnen.jnr    schedule 30.05.2011
comment
Эй, но если я выберу возраст больше 18, он тоже сработает - person Developer; 30.05.2011
comment
Я думаю, что также необходимо изменить функцию года, можете ли вы проверить один раз? - person Developer; 30.05.2011
comment
TBohnen.jnr Привет, чувак, ты здесь? - person Developer; 30.05.2011
comment
да, извините, я пытаюсь изменить то, как вы это делаете, на данный момент вы используете только год и месяц. Если вы используете более точный метод, он должен быть лучше, сейчас обновите код - person TBohnen.jnr; 30.05.2011
comment
Хорошо, измените свой monthDiff на мой getdays, а затем также обновите функцию разницы. Единственная проблема заключается в том, что вам все еще нужно вычесть високосные годы, для чего я сейчас создам функцию. - person TBohnen.jnr; 30.05.2011
comment
Большое спасибо, если возникнут проблемы, я дам вам знать - person Developer; 30.05.2011
comment
@TBohnen.jnr мне нужна небольшая помощь, если я хочу сделать то же самое для другого, например, если у меня есть 2 даты, и если я выберу дату как 1-3-2011 в одном текстовом поле, и если я выберу другую как 31-12-2010`, это должно вызвать ошибку как я могу это сделать, пожалуйста, помогите - person Developer; 26.07.2011