jQuery   发布时间:2022-04-19  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了jquery – mvc3自定义验证属性不在客户端验证大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
创建了一个自定义验证属性,我也想让它在客户端工作.这是Model类

public class CreditCardAttribute : ValidationAttribute,IClientValidatable
    {
        public override bool IsValid(object value)
        {
            var number = Convert.ToString(value);
            return IsValidnumber(number);
        }
        private bool IsValidnumber(String number)
        {
            int[] DELTAS = new int[] { 0,1,2,3,4,-4,-3,-2,-1,0 };
            int checksum = 0;
            char[] chars = number.tocharArray();
            for (int i = chars.Length - 1; i > -1; i--)
            {
                int j = ((int)chars[i]) - 48;
                checksum += j;
                if (((i - chars.Length) % 2) == 0)
                    checksum += DELTAS[j];
            }

            return ((checksum % 10) == 0);
        }

        public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata Metadata,ControllerContext context)
        {
            yield return new ModelClientValidationRule { 
            Errormessage = this.Errormessage,ValidationType = "CreditCard"
            };

        }
    }

jQuery的:

jQuery.validator.addMethod('CreditCardtest',function (value,element,params)
    {
    return false;
    });


    jQuery.validator.unobtrusive.adapters.add('CreditCard',{ },function(options){
        options.rules['CreditCardtest'] = true;
        options.messages['CreditCardtest'] = options.message;
    });

我不确定应该去CreditCardTest,我想在这里重写我在模型中的内容吗?

谢谢

解决方法

验证信用卡号可能是您不希望实现客户端验证的内容.

但是如果您对如何在一般情况下实现它感兴趣,则必须在javascript中实现与服务器上相同的逻辑.

您的自定义验证属性只有一个问题,这是验证类型的名称,它必须只包含小写字母:

public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata Metadata,ControllerContext context)
{
    yield return new ModelClientValidationRule 
    { 
        Errormessage = this.Errormessage,ValidationType = "creditcard" // this should be only lowercase letters
    };
}

一旦我们修复了,我们就可以在客户端上实现相同的验证逻辑:

@model Myviewmodel

<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
<script type="text/javascript">
    var isValidnumber = function (value,params) {
        var DELTAS = [0,0];
        var checksum = 0;
        for (var i = value.length - 1; i > -1; i--) {
            var j = value.charCodeAt(i) - 48;

            checksum += j;
            if (((i - value.Length) % 2) == 0) {
                checksum += DELTAS[j];
            }
        }
        return (checksum % 10) == 0;
    };

    jQuery.validator.addMethod('CreditCardtest',isValidnumber);

    jQuery.validator.unobtrusive.adapters.add('creditcard',function (options) {
        options.rules['CreditCardtest'] = true;
        options.messages['CreditCardtest'] = options.message;
    });
</script>

@using (Html.beginForm())
{
    @Html.EditorFor(x => x.number)
    @Html.ValidationmessageFor(x => x.number)
    <button type="submit">OK</button>
}

显然,所有脚本都会进入一个单独的文件,而不是在视图中.我把它留在这里是为了更容易阅读.

大佬总结

以上是大佬教程为你收集整理的jquery – mvc3自定义验证属性不在客户端验证全部内容,希望文章能够帮你解决jquery – mvc3自定义验证属性不在客户端验证所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。