c# - 要验证哪一个? Viewodel、Model、Html、jQuery 还是全部?

标签 c# asp.net-mvc validation data-annotations

如您所知Validation对于mvc网站来说非常重要。据我了解,您可以在四个级别进行验证。困惑从这里开始?我应该只使用ViewModel 验证,还是ViewModel 和模型验证,但不HTML 属性,或者可能是全部。使用所有验证方法会使代码变得复杂,难以阅读模型和 View 模型,但很可靠。仅使用 View 模型或模型验证是不安全的。想象一下,您正在构建一个至少有 300 - 500 个模型和 View 模型的项目。您的方法是什么?

HTML 属性

<input type="text" required>

ViewModel 数据注释

[Required(ErrorMessage="You must enter your name")]
public string Name {get; set;}

jQuery

$("#someForm").validate()

模型验证和数据注释

[Required(ErrorMessage="ENTER YOUR NAME")]
public string Name {get;set;}

public override IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
    //This is related to my architecture. Domain model inherits IValidateObject and overrides it. No big deal. This method raises when dbContext.SaveChange() method is in action
    if(Name.Length == "Admin")
    {
       yield return new ValidationResult("You can't use a reseved name.", new[] {"Name"});
    }
}

最佳答案

我建议进行客户端验证(HTML 和 Javascipt)并验证存储在数据库中的实体。

HTML 和 Javascipt 验证为用户提供快速反馈并改善用户在使用应用程序时的体验。 您永远不应该忘记,任何针对您网站的客户端输入都是不安全的,您不能信任该数据。

还应该完成实体验证,因为如果您有另一个 API,则必须确保数据库中没有存储无效数据。

关于c# - 要验证哪一个? Viewodel、Model、Html、jQuery 还是全部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32964483/

相关文章:

c# - 文件名有两个反斜杠 C#

css - 我可以在 Visual Studio Express 2013 for web 中使用 Sass(css 预处理器)吗?

ruby-on-rails - 设计 - 不要使用电子邮件

java - Bean验证: multiple validators on field

c# - 为什么 Enum 上的 HasFlag 扩展方法胜过 Enum.HasFlag?

c# - 如何在 .NET 中实现作业队列?

c# - struct tostring() 方法重定向到抽象类 ValueType

asp.net-mvc - IIS 7 重写规则和 Url.Content 问题

asp.net-mvc - Mvc 3 应用程序随机停止(特别是在回收后)IIS 7.5 集成模式

java - 验证字符串输入的一部分以确保为某些索引输入字母或数字