即使输入无效,asp 页面上的自定义验证器也会返回 Page.IsValid (ture)
Posted
技术标签:
【中文标题】即使输入无效,asp 页面上的自定义验证器也会返回 Page.IsValid (ture)【英文标题】:Custom validator on asp page returns Page.IsValid (ture) even when invalid entry 【发布时间】:2013-04-04 14:49:44 【问题描述】:我有一段代码需要修复。
<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;
电子邮件验证功能:
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”)时,它会显示“无效条目”,但 Page.IsValid 正在返回 True。 谁能提一下哪里有问题?
【问题讨论】:
您可以发布您的电子邮件验证代码吗? 是的..我已经更新了问题。 【参考方案1】:我用它来验证电子邮件:
<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>
这是客户端验证而不是服务器端验证
编辑
目前服务器不知道自定义验证器是否有效。
您需要在 aspx 中的自定义验证器中添加:OnServerValidate="ServerValidation"
。
然后添加以下服务器端:
void ServerValidation (object source, ServerValidateEventArgs arguments)
//perform your check here.
arguments.IsValid = false;
现在当Page.IsValid
被调用时,服务器将知道自定义验证器。
见this article
【讨论】:
实际上电子邮件验证是正确的,它给出了“无效的电子邮件”(args.IsValid = false),但 Page.IsValid 给出了 ture。【参考方案2】:试试这个 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>
【讨论】:
thnx 但我的项目中没有 ajaxtoolkit。没有它我们就不能这样做..当然我可以下载它,但客户端不允许。 但是你可以使用asp验证器calloutextender而不是ajax以上是关于即使输入无效,asp 页面上的自定义验证器也会返回 Page.IsValid (ture)的主要内容,如果未能解决你的问题,请参考以下文章
即使对于无效的电子邮件,使用 jquery 的电子邮件验证也会返回 true
即使模型无效,ASP.NET MVC“Ajax.BeginForm”也会执行 OnSuccess