CustomValidation с использованием OnServerValidate и ClientValidationFunction

У меня проблемы с использованием элемента управления CustomValidation, я хочу проверить, меньше ли год, введенный в текстовом поле даты рождения, год выпуска, выбранный из раскрывающегося списка, на 20 лет. Я думаю, что использование ClientValidationFunction намного лучше, когда я пытался его использовать:

<asp:CustomValidator ID="BirthYearCustomValidator" runat="server" ControlToValidate="ddlGraduationYear" ErrorMessage="Enter a valid graduation year." SetFocusOnError="true" ValidationGroup="SaveEducationStep" Display="Dynamic" ClientValidationFunction="GraduationYearValidation"></asp:CustomValidator>

вот сценарий

<script type="text/javascript">

function GraduationYearValidation(sender, args) {

    var brithYear = parseInt(new Date(document.getElementById('<%=txtBirthDate.ClientID%>').value).getFullYear());

    var gradeYear = parseInt(document.getElementById('<%=ddlGraduationYear.ClientID%>').options[document.getElementById('<%=ddlGraduationYear.ClientID%>').selectedIndex].text);

    if ((brithYear - gradeYear) < 20) {
        return args.IsValid = true;
    }
    else {
        return args.IsValid = false;
    }
}

I get those errors: document.getElementById(...) is null and GraduationYearValidation is not defined.

Итак, я попытался сделать это на стороне сервера:

<asp:CustomValidator ID="BirthYearCustomValidator" runat="server" ControlToValidate="ddlGraduationYear" ErrorMessage="enter a valid graduation year." SetFocusOnError="true" ValidationGroup="SaveEducationStep" Display="Dynamic" OnServerValidate="BirthYearCustomValidator_ServerValidate"></asp:CustomValidator>

код позади:

protected void BirthYearCustomValidator_ServerValidate(object source, ServerValidateEventArgs args)
    {
        int brithYear = Convert.ToDateTime(txtBirthDate.Text).Year;
        int gradeYear = Convert.ToInt32(ddlGraduationYear.SelectedValue);

        if ((gradeYear - brithYear) < 20)
        {
            args.IsValid = false;
        }
        else
        {
            args.IsValid = true;
        }
    }

это не работает, и я искал причину, по которой я обнаружил, что это может быть потому, что мне нужно написать Page.Validate("SaveEducationStep"); и проверить, есть ли Page.IsValid перед сохранением, но это все еще не работает со мной, любые предложения по обоим сценариям будут оценены. благодаря.


person user3146172    schedule 18.03.2014    source источник
comment
почему бы тебе не использовать asp:CompareValidator   -  person Arshad    schedule 18.03.2014
comment
я пробовал, но я думаю, что это ValueToCompare при установке его с помощью кода позади должна быть строка, и мне нужно сравнить целые числа?   -  person user3146172    schedule 18.03.2014
comment
Вам действительно нужно детализировать, когда вы говорите, что это не работает. До сервера доходит? Достигает ли он метода проверки сервера?   -  person Mt. Schneiders    schedule 18.03.2014
comment
Он не достигает метода проверки сервера.   -  person user3146172    schedule 18.03.2014


Ответы (1)


проверка на стороне клиента работает, проверьте свой код

 <asp:TextBox ID="txtDate" runat="server"></asp:TextBox>
    <asp:DropDownList ID="dddate" runat="server">
        <asp:ListItem Text="2014" Value="2014"></asp:ListItem>
        <asp:ListItem Text="2013" Value="2013"></asp:ListItem>
        <asp:ListItem Text="2012" Value="2012"></asp:ListItem>
        <asp:ListItem Text="2011" Value="2011"></asp:ListItem>
    </asp:DropDownList>
    <asp:CustomValidator ID="CustomValidator1" ValidateEmptyText="true" EnableClientScript="true"             runat="server" ErrorMessage="CustomValidator" ValidationGroup="test" ClientValidationFunction="abc" ControlToValidate="dddate"></asp:CustomValidator>
    <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" ValidationGroup="test" />

 <script type="text/javascript">
    function abc(sender, args) {


        var birthYear = parseInt(new Date(document.getElementById('<%=txtDate.ClientID%>').value).getFullYear());

            var gradeYear = parseInt(document.getElementById('<%=dddate.ClientID%>').options[document.getElementById('<%=dddate.ClientID%>').selectedIndex].text);
            if ((gradeYear - birthYear) > 20) {
                return args.IsValid = true;
            }
            else {
                return args.IsValid = false;
            }
        }


</script>
person Lehal    schedule 19.03.2014
comment
Я получаю document.getElementById('<%=txtDate.ClientID%>') is null при попытке, но $(document).ready(function GraduationYearValidation(sender, args){...}); я получаю GraduationYearValidation не определен. - person user3146172; 19.03.2014