我正在尝试使用ASP.net实现表单验证,我尝试了每个建议这里的解决方案,但目前最好的解决方案在aspsnippets.com上。
问题在于电子邮件字段仅验证正则表达式。如果我更改验证器的顺序,则仅验证必需表达式。
可能的问题是,代码循环遍历所有验证器,但不会同时比较引用同一控件的验证器。这会导致仅应用于控件的最后一个验证器条件。
我的代码如下:
<asp:TextBox ID="tTitle" runat="server" onblur="WebForm_OnBlur()"/>
<asp:RequiredFieldValidator runat="server" ControlToValidate="tTitle"/>
<asp:TextBox ID="tEMail" runat="server" onblur="WebForm_OnBlur()"/>
<asp:RequiredFieldValidator runat="server" ControlToValidate="tEMail"/>
<asp:RegularExpressionValidator runat="server" ControlToValidate="tEMail"
ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"/>
<asp:LinkButton ID="btnSubmit" runat="server" Text="Submit"/>
Javascript
<script type="text/javascript">
function WebForm_OnSubmit() {
if (typeof (ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false)
{
for (var i in Page_Validators) {
try {
var control =
document.getElementById(Page_Validators[i].controltovalidate);
if (!Page_Validators[i].isvalid) {
control.className = "error";
} else {
control.className = "";
}
} catch (e) { }
} return false;
} return true;
}
function WebForm_OnBlur() {
for (var i in Page_Validators) {
try {
var control =
document.getElementById(Page_Validators[i].controltovalidate);
if (!Page_Validators[i].isvalid) {
control.className = "error";
} else {
control.className = "";
}
} catch (e) { }
} return false;
}
</script>
问题在于电子邮件字段仅验证正则表达式。如果我更改验证器的顺序,则仅验证必需表达式。
可能的问题是,代码循环遍历所有验证器,但不会同时比较引用同一控件的验证器。这会导致仅应用于控件的最后一个验证器条件。