你在哪里做验证?模型,控制器或视图

alu*_*umb 12 validation asp.net-mvc design-patterns

您在哪里将用户输入验证放在Web表单应用程序中?

  1. 查看:JavaScript客户端
  2. 控制器:服务器端语言(C#...)
  3. 型号:数据库(存储过程或依赖项)

我认为每个级别都需要验证:

  1. 用户输入了一个合理的值吗?
    • 是日期实际日期,是数字实际数字...
  2. 再次执行1.中的所有检查以及检查恶意攻击(IE XSS或SQL注入)
    • 1中完成的检查主要是为了避免用户出错时服务器往返.
    • 由于它们是在javascript中在客户端完成的,因此您不能相信它们已经运行.再次验证这些值将阻止一些恶意攻击.
  3. 是否满足依赖性(即,用户是否对有效问题添加了注释)
    • 一个好的界面使这些很难被违反.如果有人抓到了什么东西,那就出错了.

[受此回应的启发]

Fly*_*wat 7

我检查所有层,但我想注意我使用的验证技巧.

我在数据库层验证,对模型的适当约束将提供自动数据完整性验证.

这是一种似乎在大多数网络程序员身上丢失的艺术.

  • 是的,但是失败的插入并不容易找到失败的*原因*. (2认同)
  • 但是,为什么在你之前可以轻松检查的时候,为什么要让它走得那么远呢?您可以像解析错误消息一样轻松地验证数据. (2认同)

Mat*_*tW. 5

在模型中进行验证,可选择在UI中自动化例程,从模型中获取提示并改善用户体验.

通过自动化例程,我的意思是在用户界面中不应该有任何每个模型的验证代码.如果你有一个验证方法库,比如RoR(它有像validates_presence_of:username这样的方法),那么控制器或视图应该能够读取这些并应用等效的javascript(或任何方便的)方法.

这意味着您必须在ui中复制完整的验证库,或者至少在使用预先存在的验证库时提供映射.但是一旦完成,您将不必在模型外部编写任何验证逻辑.

  • 你能用"自动化程序"清除你的意思吗? (2认同)