在我的 WebForms 应用程序中,我有一个 CustomValidator
控件。该控件执行我创建的 JavaScript 函数。如果此函数返回 false,则表单将不会提交。此验证器与标准 RequiredFieldValidator
和 RegularExpressionValitors
一起使用。
这曾经工作得很好,但是现在,即使 JavaScript 函数返回 false
,页面仍然会提交。由于某种原因,CustomValidator
被忽略。只要 RequiredFieldValidator
和 RegularExpressionValidator
控件通过,页面就会提交,即使 JavaScript 函数在提交时显示错误。
我已经调试了 JavaScript 函数,它肯定返回 false
。我的 CustomValidator
没有使用任何服务器端代码。
JavaScript:
function validateForm() {
if (document.getElementById("DDApplicationID").selectedIndex > 0
&& document.getElementById("div_applicationType").style.display != "none") {
return true;
}
else if (document.getElementById("DDApplicationID").selectedIndex > 0) {
var valid = true;
((validateTrainStation() == false) ? valid = false : valid);
((validateSupportType() == false) ? valid = false : valid);
((validateHomeStatus() == false) ? valid = false : valid);
((validateOtherNationality() == false) ? valid = false : valid);
((validateOtherHomeStatus() == false) ? valid = false : valid);
((validateSortCode() == false) ? valid = false : valid);
((validateCareLeaverMessage() == false) ? valid = false : valid);
return valid; //returns false in JavaScript debugger on Chrome
}
}
网络表单.aspx
<form id="Application" runat="server">
<asp:CustomValidator ID="CustomValidator1" runat="server" ValidationGroup="AllValidation" ClientValidationFunction="validateForm"></asp:CustomValidator>
<asp:Button ID="SaveLSFApplication" runat="server" Text="Submit Application" OnClick="saveApplication" ValidationGroup="AllValidation" />
</form>
WebForms.aspx.vb
Sub saveApplication(ByVal sender As Object, ByVal e As EventArgs)
If Page.IsValid Then
'--- do logic
End If
End Sub
我知道仅客户端验证还不够好,但它适用于仅当满足特定条件时才为非可选的表单部分,即当用户在下拉框中选择“其他”时,我们希望他们在文本框中输入原因。
最佳答案
我自己已经解决了这个问题。尽管 JavaScript 函数返回 false,但这在 CustomValidator
控件的上下文中没有任何意义。为了阻止表单提交,CustomValidator
会评估属性 IsValid
。如果 IsValid
为 false
,则表单将不会提交。
以下是修改后的 JavaScript 函数以反射(reflect)此更改:
function validateForm(sender, args) { //added two function parameters
if (document.getElementById("DDApplicationID").selectedIndex > 0
&& document.getElementById("div_applicationType").style.display != "none") {
return true;
}
else if (document.getElementById("DDApplicationID").selectedIndex > 0) {
var valid = true;
((validateTrainStation() == false) ? valid = false : valid);
((validateSupportType() == false) ? valid = false : valid);
((validateHomeStatus() == false) ? valid = false : valid);
((validateOtherNationality() == false) ? valid = false : valid);
((validateOtherHomeStatus() == false) ? valid = false : valid);
((validateSortCode() == false) ? valid = false : valid);
((validateCareLeaverMessage() == false) ? valid = false : valid);
args.IsValid = valid; //no longer returning valid
}
}
如您所见,我添加了两个函数参数:sender
和 args
。然后,我现在将 args
参数的属性 IsValid
设置为 valid< 的值,而不是简单地返回
。因此,如果 valid
/valid
为 false
,则 IsValid
为 false。然后评估此 IsValid
,从而阻止表单继续提交。
关于javascript - WebForms - 自定义验证器不再工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38971586/