使用[Required]
和[MaxLength]
装饰属性非常简单且效果很好。它还带有客户端验证。
但是,您的数据通常更复杂。也许您需要检查数据库中是否存在某些内容,或者与外部服务进行通信以验证某些内容。您仍需要验证,但标准的DataAnnotations还不够。
执行此操作的好方法是使用自定义DataAnnotations。您可以创建自己的名为[UniqueEmailAttribute]
,它会检查数据库以查看电子邮件输入是否已存在。
这提出了一个架构问题。如果你使用这样的自定义DataAnnotation,你如何支持分离关注,依赖注入等?在过去,我简单地创建了一个新的DbContext
,实例化了所需的对象并完成了我的验证。这很丑陋,打破了我的设计理念。
在保持优秀代码设计的同时验证表单数据的最佳解决方案是什么?
我意识到这个问题似乎已经得到了回答,但请记住,我的问题不是“怎么能这样做?”而是“如何做得好?”,或者“什么是最佳实践?”这个问题是关于保持凝聚力的解决方案/项目结构和设计。代码示例可以是C#或VB.NET。赞赏MVC4示例项目的链接。
答案 0 :(得分:0)
我认为你可以写一个挂钩到jquery验证器的自定义注释
然后,您可以使用它通过ajax调用控制器方法来进行验证
它仍然感觉像是一个黑客(并且可能很脆弱),但似乎比在属性中具有逻辑和依赖性更好