即使无效输入,asp页面上的自定义验证器也会返回Page.IsValid(ture)

时间:2013-04-12 07:10:27

标签: asp.net validation email-validation

我有一段代码需要修复。

<td>
   <asp:TextBox ID="txtEmail" runat="server" CssClass="TextBoxCss"></asp:TextBox>
   <asp:RequiredFieldValidator ID="reqEmail" runat="server" ControlToValidate="txtEmail"
        ErrorMessage="Enter Email" ValidationGroup="entryvalid" Display="None">  
   </asp:RequiredFieldValidator>
   <asp:ValidatorCalloutExtender ID="ValidatorCalloutExtender4" runat="server" 
        TargetControlID="reqEmail"  CssClass="CustomValidator" />
   <asp:CustomValidator ID="valEmail" ControlToValidate="txtEmail" Display="None"
        runat="server" ValidationGroup="entryvalid" ErrorMessage="Invalid Email Address"
        ClientValidationFunction="ValidateEmail" />
   <asp:ValidatorCalloutExtender ID="ValidatorCalloutExtender3" runat="server" 
        TargetControlID="valEmail" CssClass="CustomValidator" />
</td>

如果我将电子邮箱留空,则表示“输入邮件”和page.IsValid使用以下代码返回 False

public bool IsValid
{
   get
    {
     EnableValidation(true);
     Page.Validate("entryvalid");                
     return Page.IsValid;
    }
}

EmailValidation func:

function ValidateEmail(source, arguments) {
    var val1 = $.trim(arguments.Value.toLowerCase());
    var regexemail = /^([\w-_]+\.)*[\w-_]+@([\w-_]+\.)*[\w-_]+\.[\w-_]+$/;
    arguments.IsValid = regexemail.test(val1);
}

但是当我提供无效的电子邮件(“user @ gmail @ .com”)时,它会显示“Invalid Entry”但是Page.IsValid正在返回 True

任何人都可以提一下可能出错的地方吗?

2 个答案:

答案 0 :(得分:3)

我用它来进行电子邮件验证:

<asp:RegularExpressionValidator ID="valEmail" runat="server" 
  ErrorMessage="* Please enter a valid email address" 
  ControlToValidate="txtEmail"
  ValidationGroup="Group1" 
  ValidationExpression="^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,4})$">
</asp:RegularExpressionValidator>

这是客户端验证而不是服务器端验证

修改

目前,服务器不知道自定义验证器是否有效。

您需要将:OnServerValidate="ServerValidation"添加到a​​spx中的自定义验证程序。

然后添加以下服务器端:

void ServerValidation (object source, ServerValidateEventArgs arguments)
{
  //perform your check here.
  arguments.IsValid = false;
}

现在,当调用Page.IsValid时,服务器将知道自定义验证器。

请参阅this article

答案 1 :(得分:1)

试试这个Aspx代码:

<asp:RequiredFieldValidator runat="server" ID="rfvEmail" Display="None" ControlToValidate="txtEmail"
                            InitialValue="" ValidationGroup="SubscriptionDetails" ErrorMessage="Email is Mandatory"
                            ForeColor="Red"></asp:RequiredFieldValidator>
                        <ajaxToolkit:ValidatorCalloutExtender ID="vceEmail" TargetControlID="rfvEmail" runat="server">
                        </ajaxToolkit:ValidatorCalloutExtender>
                        <asp:RegularExpressionValidator ID="regexEmailValid" runat="server" ValidationExpression="^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$"
                            ControlToValidate="txtEmail" ErrorMessage="Invalid Email" ValidationGroup="SubscriptionDetails"
                            Display="None"></asp:RegularExpressionValidator>
                        <ajaxToolkit:ValidatorCalloutExtender ID="vce1Email" TargetControlID="regexEmailValid"
                            runat="server">
                        </ajaxToolkit:ValidatorCalloutExtender>