我们有一些客户使用的表格,有人可以在他们的网站上注册。它是可定制的,因为表单的所有者可以设置在表单上显示或隐藏的字段,并且也是必需的。但是,如果显示某些字段,则需要设置另一个字段才能使表单有效。所以验证可能很棘手。另一个棘手的部分是我们希望所有错误消息一起显示在验证摘要中。如果我只是拥有自己的函数,该函数被称为 onclientclick 的链接按钮,我无法将它生成的任何错误消息添加到验证摘要中。
所以我们最初找到的解决方案是在页面上创建一个自定义验证器,而不设置它的 controltovalidate 属性,而是将它的 clientvalidationfunction 设置为我们想要调用的函数。这允许我们设置 sender 参数的错误消息,以便它随后显示在验证摘要中。
我们需要添加一些额外的验证逻辑,当这样做时,我意识到页面不再像以前那样工作(我认为它在 .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 的结果?还是有其他原因它不再起作用?谢谢。