1

我们有一些客户使用的表格,有人可以在他们的网站上注册。它是可定制的,因为表单的所有者可以设置在表单上显示或隐藏的字段,并且也是必需的。但是,如果显示某些字段,则需要设置另一个字段才能使表单有效。所以验证可能很棘手。另一个棘手的部分是我们希望所有错误消息一起显示在验证摘要中。如果我只是拥有自己的函数,该函数被称为 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 的结果?还是有其他原因它不再起作用?谢谢。

4

2 回答 2

0

您的链接按钮应该具有CauseValidation = true触发验证。

于 2014-01-28T20:52:07.707 回答
0

您说您相信这在 .net 2.0 中有效。我找到了有关ASP.NET 4 中的重大更改的页面。我没有看到任何关于 CustomValidator 控件的具体内容,这将是一个重大更改。但它谈到了 web.config 中的一个设置,您可以使用 try。它将渲染兼容性版本降低到 2.0 或 3.5。

<pages controlRenderingCompatibilityVersion="2.0" />

或者

<pages controlRenderingCompatibilityVersion="3.5" />

如果这不起作用,您还可以尝试将 Web 项目的 .net 版本降低到 2.0 或 3.5。

于 2014-01-28T21:01:15.003 回答