如何扩展 ASP.NET MVC2 开箱即用验证以验证信用卡/电子邮件?
Posted
技术标签:
【中文标题】如何扩展 ASP.NET MVC2 开箱即用验证以验证信用卡/电子邮件?【英文标题】:How do I extend ASP.NET MVC2 out-of-box validation to validate creditcard / emails? 【发布时间】: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;
【问题讨论】:
【参考方案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\d3)\d11)$.",
ErrorMessage="Please enter a valid Credit Card.")]
public string CreditCard get; set;
查看this、this 和this 链接了解更多信息。
【讨论】:
对 jquery.validate 的信用卡验证(参见 ***.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>
【讨论】:
以上是关于如何扩展 ASP.NET MVC2 开箱即用验证以验证信用卡/电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章
SignalR 授权无法在带有 Identity Server 的 asp.net core angular SPA 中开箱即用
ASP.NET MVC2 自定义 jQuery 验证:客户端
在 Visual Studio 2010 中使用 ASP.NET MVC2 Web 应用程序以 .NET3.5 为目标?