簡體   English   中英

使用OnServerValidate和ClientValidationFunction的CustomValidation

[英]CustomValidation using OnServerValidate and 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;
    }
}

我收到這些錯誤:document.getElementById(...)為null,並且未定義GraduationYearValidation。

因此,我嘗試通過以下方式使其成為服務器端:

<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 ,但仍然無法正常工作,在這兩種情況下,任何建議都將受到贊賞。 謝謝。

客戶端驗證正在運行,請檢查您的代碼

 <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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM