我们有许多客户可以在其网站上注册的表单。这是可定制的,表单的所有者可以设置一个字段在窗体上显示或隐藏,也是必需的。但是,如果显示某些字段,则需要设置另一个字段以使表单有效。所以验证可能会非常棘手。另一个棘手的部分是,我们希望所有的错误消息在验证总结中一起显示。如果我只是有我自己的函数被称为onclientclick linkbutton我不能添加它生成的任何错误消息到验证摘要。客户端验证不起作用的自定义验证器
所以我们最初找到的解决方案是在页面上创建一个自定义验证器,而不设置它的controltovalidate属性,但将它的clientvalidationfunction设置为我们想调用的函数。这允许我们设置发件人参数的错误消息,以便它随后出现在验证摘要中。
我们需要添加一些额外的验证逻辑,当我这样做时,我意识到页面不再像以前那样工作了(我认为它在.net 2中工作,现在我们在.net 4上)。
这里是我有的基本的html代码。
网页 -
<asp:ValidationSummary ID="vsummary" runat="server" HeaderText="Oops, it appears the following required fields are not completed." CssClass="error" />
<asp:CustomValidator ID="cstCustomScripts" runat="server" ClientValidationFunction="ValidateExtraFields" />
...additional form fields here
<asp:LinkButton ID="btnAddUpdate" runat="server" onclick="SubmitProfile" />
和得到通过自定义验证调用的JavaScript ...
function ValidateExtraFields(sender, args) {
args.IsValid = true;
if (typeof window.RelocationSelectionRequired == 'function') {
if (!RelocationSelectionRequired()){
args.IsValid = false;
sender.errormessage = "If you are open to relocating, please select the state(s) and cities.";
return;
}
}
if (typeof window.ValidateHomeState == 'function') {
if (!ValidateHomeState()) {
args.IsValid = false;
sender.errormessage = "Home state is required.";
return;
}
}
if (typeof window.ValidateWorkState == 'function') {
if (!ValidateWorkState()) {
args.IsValid = false;
sender.errormessage = "Work state is required.";
return;
}
}
var invalidNumberField = "";
$("[data-validate-function='GreaterThanZero']").each(function() {
var t = $(this);
if (t.val().trim() == "0") {
args.IsValid = false;
invalidNumberField = t.attr("controlName");
return false;
}
});
if (invalidNumberField.length > 0) {
sender.errormessage = invalidNumberField + " cannot be zero.";
return;
}
}
在过去的功能会成功追加任何消息,从这个功能在ValidationSummary控制并不提交表格。现在它仍然追加消息,但表单也不应该提交。有谁知道这是从.net 2转移到.net 4的结果吗?还是有其他原因,它不再有效?谢谢。
我从来没有需要过。如果我在页面上留下其他必填字段中的一个,验证对他们来说工作正常 - 表单不提交。只是踢了我试了一下,但仍然在提交表单。 –