1

介绍

[Required]用and装饰属性[MaxLength]很简单,而且效果很好。它还带有客户端验证。

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

一个很好的方法是使用自定义 DataAnnotations。您可以创建自己的调用[UniqueEmailAttribute]来检查数据库以查看电子邮件输入是否已经存在。

问题

这提出了一个架构问题。如果您使用这样的自定义 DataAnnotation,您如何支持关注点分离、依赖注入等?在过去,我简单地创建了一个新的DbContext,实例化了所需的对象并完成了我的验证。这很丑陋,打破了我的设计理念。

在保持出色代码设计的同时验证表单数据的最佳解决方案是什么?

我意识到这个问题似乎以前已经回答过,但请记住,我的问题不是“如何做到这一点?” 而是“如何才能做好?”,或者,“什么是最佳实践?” 这个问题是关于维护有凝聚力的解决方案/项目结构和设计。代码示例可以是 C# 或 VB.NET。感谢您提供指向 MVC4 示例项目的链接。

4

1 回答 1

0

我认为您可以编写一个挂钩到 jquery 验证器的自定义注释

然后,您可以使用它通过 ajax 调用控制器方法来进行验证

它仍然感觉有点像 hack(并且可能很脆弱),但似乎比在属性中包含逻辑和依赖关系更好

于 2013-06-20T15:32:25.440 回答