从我读过的很多内容来看,您似乎总是希望使用数据注释来验证。作为一名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#:
有了所有这些可能性,有意义的是不使用任何自动生成的JavaScript(来自数据注释)并关闭ClientSideValidation,并使用jQuery Validator插件而不使用任何C#依赖,除了确保HTML元素存在和可以选择。
你们大家都同意吗?我错过了什么?
答案 0 :(得分:2)
你缺少的是没有“自动生成”的javascript。客户端验证使用jquery验证和html数据属性,不生成javascript。它使用适配器类来解析属性并将它们提供给jqv,而不是..不会自动生成适配器。
话虽如此,你说数据注释不是很灵活是正确的,但它与jquery或自动生成代码无关。这是因为数据注释是静态的,并且在编译时创建。
这只是问题的一部分。即使您关闭了客户端验证,您仍然必须处理服务器端验证,无论您手动执行哪种客户端验证。您永远不想信任客户端发送的数据,因此您不能只进行客户端验证。您需要一个在服务器端工作的解决方案,并且希望它也适用于客户端
您可以使用类似fluent validation的内容来更好地控制运行时的验证。这也将在可能的情况下与客户端上的jquery验证相关联。