c# - ASP.NET MVC ViewModel 验证和单一职责原则

标签 c# asp.net-mvc validation asp.net-mvc-viewmodel

<分区>

当谈到 MVC 中的验证时,我在在线示例中看到的最常见方法是使用 ViewModel 来验证数据。人们要么使用数据注释,要么实现 IValidatableObject 和 IClientValidatable 接口(interface)。但这不会破坏单一职责原则吗? ViewModel 真的应该负责验证吗?

我想到的一种方法是创建一个单独的验证器类,并将来自 Controller 的 ModelState 字典传递给它。这种方法的缺点是我们无法通过实现 IClientValidatable 接口(interface)和使用 JQuery 验证库来执行简单的客户端验证。

在不违反 SOLID 原则的情况下,在 MVC 中实现 ViewModel 验证的正确方法是什么?

最佳答案

可以创建自定义验证属性。你仍然可以实现 unobtrusive client side validation在实现一些 JavaScript 代码片段时。在您的自定义属性中,您可以注入(inject)您的验证器类实例。

也就是说,我认为只在 View(-Model) 中确保简单的验证规则(必填字段、长度等)很好。在 this (old and now mainly obsolete) blog entry Steve 将验证的各个阶段描述为一个“连续的频谱”,其中规则不断地被执行。您可以从该条目中获取一些想法。希望对您有所帮助。

关于c# - ASP.NET MVC ViewModel 验证和单一职责原则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37832783/

相关文章:

java - Appengine - 隐藏文件夹的部署

c++ - boost program_options 自定义验证

validation - CakePHP 自定义验证规则仅在创建时检查唯一字段组合

c# - 枚举类文件名应该以 'Enum' 为后缀吗?

c# imap/pop3 邮件服务器

c# - Windows IoT 上的 Windows Universal App 中的屏幕键盘?

c# - ASP.NET - 当前上下文中不存在名称 'Context'

c# - 在 ASP.NET Core 应用程序中临时存储数据

c# - 在 Razor 组件 (Blazor) 中渲染 Razor 局部 View

c# - 获取连接的 TcpClient 的远程端口