是否有一种方法可以保留验证的单一定义,允许立即进行客户端验证,并且仍然提供服务器端验证的强度?
我熟悉以下两种方法:
首先根据模型中规定的规则在Razor输出中呈现ng-validation语法。当Razor的观点经常不能直观地与一个组织良好的Angular应用程序配对时,这似乎让我对构建Razor视图过于紧密。我可以使用这种方法,但似乎更多的是想要复制“不引人注目的jQuery / MVC验证”的人,而不是构建一个非常适合Angular的东西。
第二种方法只是将服务器端验证返回给Angular进行渲染。它也没有彻底完成它。如果需要,我可以在没有客户端验证的情况下运行,因为单页应用程序仍然不会屏幕闪烁...但它并不理想。
例如,可能有一个工具集可以直接在WebAPI上直接反映验证规则,并在Angular应用程序中使用它们。或者我还没找到另一种方法?
在https://www.youtube.com/watch?v=lHbWRFpbma4#t=1336,演示者似乎暗示这个问题已经为Angular得到了很好的解决,并且引用了specification
(DDD Using Specification pattern for Validation)。如果你知道有任何工具可以解决我的问题,我很乐意听到它。
P.S。看起来这几乎肯定是一个经常被问到的问题。对不起,我在发布之前无法找到答案
p.p.s。我目前正计划使用实体框架,但我会转而解决这个问题。哎呀,我会考虑转换到一个完全不同的平台,这是我的第一个以角度为中心的项目。
答案 0 :(得分:2)
我推荐的方法基于@Esteban Felix评论,我在Java / Bean验证和JSON模式生成器中使用了类似的策略。
使用Validate Model Data Using DataAnnotations
为您的域模型添加注释使用JSON.net other useful links
生成架构创建一个AutoValidate
指令,该指令继续并使用AngularJS
内置的指令装饰字段以进行表单验证,例如ngPattern
以及min/max
之类的简单内容。在我的例子中,我创建了从Java世界到AngularJS指令的映射,无论我需要在哪里创建自定义指令。