我有文本框和两个验证(RequiredFieldValidator和RegularExpressionValidator(,如下所示
<asp:TextBox runat="server" ID="txtEmailFrom" CssClass="form-control"></asp:TextBox>
<asp:RequiredFieldValidator
ID="RequiredFieldValidator3"
runat="server"
ErrorMessage="Field Required"
ControlToValidate="txtEmailFrom"
Display="Dynamic"
ForeColor="Red"></asp:RequiredFieldValidator>
<asp:RegularExpressionValidator
ID="regexEmailValid"
runat="server"
ValidationExpression="w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*"
ControlToValidate="txtEmailFrom"
ForeColor="Red"
Display="Dynamic"
ErrorMessage="Invalid Email Format"></asp:RegularExpressionValidator>
但有了错误,我需要用红色突出显示字段的边界。为此,下面的代码是:
function ValidatorUpdateDisplay(val) {
if (typeof (val.display) == "string") {
if (val.display == "None") {
return;
}
if (val.display == "Dynamic") {
val.style.display = val.isvalid ? "none" : "inline";
return;
}
}
val.style.visibility = val.isvalid ? "hidden" : "visible";
if (val.isvalid) {
document.getElementById(val.controltovalidate).style.border = '1px solid #333';
}
else {
document.getElementById(val.controltovalidate).style.border = '1px solid red';
}
}
该函数仅适用于RequiredFieldValidation。我需要同时使用(RequiredFieldValidator和RegularExpressionValidator(验证。
提前谢谢。
也许您可以在javascript函数中设置断点?
我怀疑它被呼叫了两次。您在ControlToValidate上使用了两个验证器,其中一个有效,另一个无效。javascript由每个验证器执行一次,它处理验证器无效和有效的情况。
因此,显然在您的情况下,RequiredFieldValidator"获胜"并最后执行。
我不认为在这里重写框架函数ValidatorUpdateDisplay是正确的选择。如果您使用的是ASP.NET WebForms,那么也许可以选择包含Ajax Control Toolkit。它具有ValidatorCallout扩展名。我想你也可以在没有"callout"的情况下使用这个扩展,但只有HighlightCssClass选项。
http://www.ajaxtoolkit.net/ValidatorCallout/ValidatorCallout.aspx