asp.net-mvc - 如何使用自定义DataAnnotations验证更复杂的数据类型?

  显示原文与译文双语对照的内容
0 0

介绍

使用 [Required][MaxLength] 装饰性能很简单,而且工作很好。 它还带有客户端验证。

然而,通常情况下,你的数据更复杂。 也许你需要检查数据库中是否存在某些内容,或者与外部服务进行通信以验证某些内容。 你仍然需要验证,但标准DataAnnotations还不够。

一个好的方法是使用定制的DataAnnotations 。 你可以创建自己的名为 [UniqueEmailAttribute]的来检查该电子邮件输入是否已经存在。

问题

这是一个建筑问题。 如果使用这样的定制 DataAnnotation,那么如何支持关注点分离。依赖注入等等? 在过去我创建了一个新的DbContext,实例化了所需的对象并进行了验证。 这 is,破坏了我的设计理念。

是在维护优秀代码设计时验证表单数据的一个很好?

我意识到它似乎已经回答了问题,但是记住我的问题不是"如何做到这一点",而是"怎么才能做到这一点",或者,"什么是最佳实践"这个问题是关于维护内聚的解决方案/项目结构和设计的。 代码示例可以在 C# 或者 VB.Net 中。 链接到MVC4示例项目的链接。

时间: 原作者:

0 0

我想你可以编写一个自定义注释,它可以钩子到jquery验证器

然后可以使用这个方法通过ajax调用控制器方法来执行验证

它仍然感觉像一个 hack ( 可能是脆弱的),但是比在你的属性中拥有逻辑和依赖看起来更好

...