【问题标题】:How do I extend ASP.NET MVC2 out-of-box validation to validate creditcard / emails?如何扩展 ASP.NET MVC2 开箱即用验证以验证信用卡/电子邮件?
【发布时间】:2010-12-24 06:13:56
【问题描述】:

我一直在查看文件 MicrosoftMvcJQueryValidation.js,它是您的页面和 ASP.NET MVC 2 Beta 中的 jquery.validate 对象之间的层。

它将允许jquery.validate 支持的任何类型的验证规则,并对正则表达式、字符串、范围和必填字段进行额外的特殊处理。如果它是通用/未知规则类型,它将只传递这样的参数:

  default:
     __MVC_ApplyValidator_Unknown(rulesObj,
         thisRule.ValidationType, thisRule.ValidationParameters);
    break; 

但是 - 我似乎无法弄清楚如何将其他规则注入框架生成的 JSON,例如“电子邮件”。通常规则只是来自[Required]等属性。

我知道有很多扩展点可以替换整个验证元数据提供程序 - 但我正在寻找一种简单的方法。

我该如何使用 - 例如“电子邮件”或“信用卡”验证器与这样的简单模型结合使用:

公共类登录详情 { 公共布尔可编辑{获取;放; }

    [Required(ErrorMessage="Please enter your email")]
    public string Username { get; set; }

    [Required(ErrorMessage="Please enter your password")]
    public string Password { get; set; }
}

【问题讨论】:

    标签: asp.net-mvc email-validation jquery-validate


    【解决方案1】:

    对于不同类型的数据,您可以保留Required 消息,但也可以在它们下面添加不同的属性。对于电子邮件和信用卡,像这样的Regular Expression 可能效果最好。

    [Required(ErrorMessage="Please enter your email")]
    [RegularExpression(@"\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b", 
      ErrorMessage="Please enter a valid email address.")]
    public string Email { get; set; }
    
    [Required(ErrorMessage="Please enter your password")]
    [RegularExpression(@"^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$.", 
      ErrorMessage="Please enter a valid Credit Card.")]
    public string CreditCard { get; set; }
    

    查看thisthisthis 链接了解更多信息。

    【讨论】:

    • 对 jquery.validate 的信用卡验证(参见 stackoverflow.com/questions/1864208)并没有特别印象深刻。我可以手动做一个 onblur 。这可能是电子邮件的一个很好的解决方案
    【解决方案2】:

    使用 DataAnnotationsModelValidator

    点赞this

    使用这些包括

    /Scripts/jquery-1.3.2.js

    /Scripts/jquery.validate.js

    /Scripts/MicrosoftMvcJQueryValidation.js

    使用验证函数

        <script type="text/javascript">
        $.validator.addMethod("price", function(value, element, paras) {
            if (value.length == 0) {
                return true;
            }
            if (value > paras.minValue) {
                var cents = value - Math.floor(value);
                if (cents >= 0.99 && cents < 0.995) {
                    return true;
                }
            }
            return false;
        });
    </script>
    

    【讨论】:

      猜你喜欢
      • 2013-10-25
      • 2014-03-03
      • 1970-01-01
      • 1970-01-01
      • 2011-07-06
      • 2016-09-09
      • 2013-07-14
      • 2014-06-30
      • 1970-01-01
      相关资源
      最近更新 更多