从DataAnnotations自动生成jQuery代码是AntiPattern吗?

时间:2011-12-08 05:58:40

标签: asp.net-mvc

从我读过的很多内容来看,您似乎总是希望使用数据注释来验证。作为一名JavaScript开发人员,我并不总是对自动生成的JavaScript感觉良好。

想得到社区对此的看法。首先,让我解释一下。

如果我有一个扁平,简单的文本框形式,可以映射到这样的类:

  public class Person
  {
    [Required]
    public string FirstName { get; set; }

    [Required]
    public string LastName { get; set; }

    [Required]
    public DateTime DateOfBirth { get; set; }

    [Required]
    public string State { get; set; }
  }

视图可以非常简单(一堆textboxfor或editfor),我们可以对Person对象进行强类型化。如果我打开了客户端验证,则会自动生成jQuery代码,并且我不必编写代码来进行客户端验证。 “它只是有效”,如果您只是处理这么多表单字段,这样做是合乎逻辑的。

我认为当你处理一个包含超过40个表单字段(下拉列表,多选框,复选框等)的巨大表单(比如一个IRS或某个内部网站点)时,它会变得非常混乱。此外,您可能会遇到这些情况,这会导致编写您自己的验证器,您编写的JS将过多地依赖于您的C#:

  • 该表单可以包含触发其他表单的表单字段 表格领域。
  • 如果您将DateOfBirth字段设置为[Required],那么 可能是一个按钮,点击它,使它成为不需要的
  • 您可以与必须创建的设计师并行工作 新的验证器,但不想触及C#代码(或数据 注释等。)
  • 您可以在网络上使用其他验证框架 页。

有了所有这些可能性,有意义的是不使用任何自动生成的JavaScript(来自数据注释)并关闭ClientSideValidation,并使用jQuery Validator插件而不使用任何C#依赖,除了确保HTML元素存在和可以选择。

你们大家都同意吗?我错过了什么?

1 个答案:

答案 0 :(得分:2)

你缺少的是没有“自动生成”的javascript。客户端验证使用jquery验证和html数据属性,不生成javascript。它使用适配器类来解析属性并将它们提供给jqv,而不是..不会自动生成适配器。

话虽如此,你说数据注释不是很灵活是正确的,但它与jquery或自动生成代码无关。这是因为数据注释是静态的,并且在编译时创建。

这只是问题的一部分。即使您关闭了客户端验证,您仍然必须处理服务器端验证,无论您手动执行哪种客户端验证。您永远不想信任客户端发送的数据,因此您不能只进行客户端验证。您需要一个在服务器端工作的解决方案,并且希望它也适用于客户端

您可以使用类似fluent validation的内容来更好地控制运行时的验证。这也将在可能的情况下与客户端上的jquery验证相关联。