【问题标题】:Can you have custom client-side javascript Validation for standard ASP.NET Web Form Validators?您可以为标准 ASP.NET Web 表单验证器进行自定义客户端 javascript 验证吗?
【发布时间】:2010-09-12 14:04:46
【问题描述】:

您能否为标准 ASP.NET Web 表单验证器提供自定义客户端 javascript 验证?

例如使用 asp:RequiredFieldValidator 不理会服务器端代码,但使用 jQuery 实现您自己的客户端通知以突出显示字段或背景颜色。

【问题讨论】:

    标签: asp.net jquery webforms validation


    【解决方案1】:

    是的,我已经这样做了。我使用 Firebug 找出了 Dot.Net JS 函数,然后劫持了验证器函数

    以下内容将应用于所有验证器,并且纯粹是客户端。我使用它来更改显示 ASP.Net 验证的方式,而不是实际执行验证的方式。它必须包含在 $(document).ready() 中,以确保它覆盖原始 ASP.net 验证。

    /**
     * Re-assigns a couple of the ASP.NET validation JS functions to
     * provide a more flexible approach
     */
    function UpgradeASPNETValidation(){
        // Hi-jack the ASP.NET error display only if required
        if (typeof(Page_ClientValidate) != "undefined") {
            ValidatorUpdateDisplay = NicerValidatorUpdateDisplay;
            AspPage_ClientValidate = Page_ClientValidate;
            Page_ClientValidate = NicerPage_ClientValidate;
       }
    }
    
    /**
     * Extends the classic ASP.NET validation to add a class to the parent span when invalid
     */
    function NicerValidatorUpdateDisplay(val){
        if (val.isvalid){
            // do custom removing
            $(val).fadeOut('slow');
        } else {
            // do custom show
            $(val).fadeIn('slow');
        }
    }
    
    /**
     * Extends classic ASP.NET validation to include parent element styling
     */
    function NicerPage_ClientValidate(validationGroup){
        var valid = AspPage_ClientValidate(validationGroup);
    
        if (!valid){
            // do custom styling etc
            // I added a background colour to the parent object
            $(this).parent().addClass('invalidField');
        }
    }
    

    【讨论】:

    • 你应该在粘贴代码时发布你的源代码,这只是说明如何劫持all验证,而不仅仅是某个验证器。您还应该提到这使用 jQuery,而不是标准的 asp.net ajax。以下为文章原文:ajaxprojects.com/ajax/tutorialdetails.php?itemid=362
    • 这是我在工作项目中使用的代码,我在没有那篇文章的情况下自己弄清楚了。 OP 说他想使用 jQuery。去煽动别人吧。
    • Geoff,我只想说我被这个sn-p吓到了。我离开了我的远程桌面连接,所以我可以使用我登录的浏览器来说明这有多酷。我其实一直在寻找这个。谢谢! :)
    • 我需要做类似的事情(验证后添加一个类),但在NicerPage_ClientValidatethis是在window对象的范围内。这应该适用于哪个版本的 .NET?
    【解决方案2】:

    标准的 CustomValidator 有一个 ClientValidationFunction 属性:

    <asp:CustomValidator ControlToValidate="Text1" 
                         ClientValidationFunction="onValidate" />
    
    <script type='text/javascript'>
    function onValidate(validatorSpan, eventArgs)
     { eventArgs.IsValid = (eventArgs.Value.length > 0);
       if (!eventArgs.IsValid) highlight(validatorSpan);
     }
    </script>
    

    【讨论】:

    • 申请所有验证者会很烦人。
    • 是的,我需要这样做而不将其更改为自定义验证器
    【解决方案3】:

    你可以做的是挂钩验证器并分配一个新的评估方法,如下所示:

      <script type="text/javascript">
            rfv.evaluationfunction = validator;
    
            function validator(sender, e) {
                alert('rawr');
            }
        </script>
    

    rfv 是我的必填字段验证器的 ID。您必须在页面底部执行此操作,以便在注册验证器的 javascript 后分配它。

    使用 CustomFieldValidator 并分配其客户端验证属性要容易得多。

    <asp:CustomValidator ControlToValidate="txtBox" ClientValidationFunction="onValidate" />
    
    <script type='text/javascript'>
    function onValidate(sender, e)
     { 
         alert('do validation');
     }
    </script>
    

    查看文档 herehere

    【讨论】:

    • 这是如何改变验证的行为,而不是如何改变它的显示方式。
    猜你喜欢
    • 2017-05-03
    • 2014-03-19
    • 2010-09-05
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    • 2010-10-16
    相关资源
    最近更新 更多