【问题标题】:CustomValidator with server side validation only仅具有服务器端验证的 CustomValidator
【发布时间】:2010-07-13 08:52:23
【问题描述】:

我有以下问题:

Page 上有很多验证器,除了一个之外,所有验证器都具有客户端和服务器端验证。其中之一只有服务器端验证。

问题:

我的页面正在发布,即使某些客户端验证无效。我认为它应该首先验证客户端,当一切正常时,它应该检查服务器端。

代码:

js部分:

        var hash = {
            '.jpg'  : 1,
            '.jpeg' : 1,
            '.bmp' : 1,
            '.png' : 1
        };
        function FileExtension(obj, args) {
            var file = '<%=UploadFoto_FileUpload.ClientID %>';
            var re = /\..+$/i;
            var ext = $("#" + file).val().match(re);
            if (ext != undefined) {
                ext = ext.toLowerCase();
                if (hash[ext]) {
                    args.IsValid = true;
                } else {
                    args.IsValid = false;
                }
            }
            else {
                args.IsValid = false;
            }
        }
        function Validator2(obj, args){
            args.IsValid = true;
        }

asp.net 部分:

                <asp:CustomValidator ID="UploadFoto_FileUpload_CustomValidator1" ErrorMessage="Ext error" ClientValidationFunction="FileExtension" OnServerValidate="UploadFoto_FileUpload_CustomValidator1_ServerValidate" Display="Dynamic" runat="server" />
                <asp:CustomValidator ID="UploadFoto_FileUpload_CustomValidator2" ErrorMessage="De foto is te groot (maximaal 6mb)" ClientValidationFunction="Validator2" OnServerValidate="UploadFoto_FileUpload_CustomValidator2_ServerValidate" Display="Dynamic" runat="server" />

                <asp:FileUpload ID="UploadFoto_FileUpload" CssClass="uploadField" runat="server" />

                <asp:ImageButton ID="Submit_ImageButton" ImageUrl="../Images/btn-verzenden.png" AlternateText="Verzenden" CssClass="verzendenBtn" OnClick="Submit_ImageButton_Click" runat="server" /> 

经过进一步测试,我发现即使只有第一个 - UploadFoto_FileUpload_CustomValidator1 也会出现相同的情况:

当上传字段为空时,会显示 Ext 错误且页面未发布

when file is chosen but ext is wrong then Ext error is displayed and page is not being posted

选择具有正确突出部门的文件然后未显示错误消息,但甚至已发布表单,即使是有错误的其他验证器

【问题讨论】:

  • 嗨,触发客户端验证的按钮应该具有相同的验证组。能否请您添加一些 html,以便我们查看问题所在?
  • 页面只有一组,这个验证器是和FileUpload控件连接的
  • 如果您向我们展示您的 html,仍然会容易得多。您可以在此处找到一个非常简洁的使用组验证器的示例:dotnet-guide.com/validationgroups.html

标签: c# asp.net


【解决方案1】:

我相信验证会触发所有的验证器 - 这样您就不会因为梳理下一个错误/必填字段而获得烦人的用户体验。

假设您无法编写有意义的客户端脚本,只需伪造它并返回它在客户端有效。您的服务器端逻辑将检查实际规则,但如果其他验证器失败,客户端代码将阻止它回发。

【讨论】:

    【解决方案2】:

    对不起,经过一整天的工作,我发现这是两件事的结合:

    1. 奇怪的 js 行为 ext = ext.toLowerCase(); 应该是 ext = ext.toString().toLowerCase(); 因为匹配返回 this 作为对象类型而不是字符串(如我所料)所以 toLowerCase 不能用于此对象。
    2. 第二件事是缺少其他自定义验证器的愚蠢(女巫将 isvalid 设置为 true)客户端验证功能 - 感谢 @Mark Brackett

    打扰各位了!

    【讨论】:

      【解决方案3】:

      这就是验证的工作方式,如果您可以在没有触发某些客户端验证器的情况下回发页面,那么按钮或链接或任何触发回发的东西要么不在未触发的验证器的验证组中,要么它具有 @ 987654321@ 设置为 false。

      【讨论】:

        【解决方案4】:

        您没有设置验证组

        【讨论】:

        • 一般页面只有一组时不需要。
        • 这是真正的阿瓦塔,但也许你想尝试一下。
        【解决方案5】:

        它应该只在所有客户端验证器返回 true 时回发,您是否使用 alert(args.IsValid); 确认是这种情况?

        顺便说一句,您可以使用RegularExpressionValidator 干净地进行文件扩展名验证:

        <asp:RegularExpressionValidator runat="server" ErrorMessage="Only JPEG, GIF, and PNG files are allowed!" ValidationExpression="^.*\.(jpg|JPG|jpeg|JPEG|gif|GIF|png|PNG)$" ControlToValidate="UploadFoto_FileUpload">*</asp:RegularExpressionValidator>
        

        【讨论】:

        • 似乎在选择文件后是否有 CustomValidator over FileUpload 表单正在发布,即使还有其他具有客户端验证的验证器。
        猜你喜欢
        • 2023-03-23
        • 2011-12-22
        • 2018-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-30
        相关资源
        最近更新 更多