0

假设我有一个表单,其中包含收集未来会议数据的字段(不是真正的领域,但足以解决这个问题)。验证的一部分是新事件在那一年只能发生一次,例如,如果您在 2012 年举行了“stackoverflow getmessyandrunk 会议” - 不应允许用户输入具有相同名称的新事件并且年...

现在 - 我到目前为止尝试的是为每个字段添加一个远程验证器:

一个用于使用 AdditionalFields 属性包含年份字段的事件名称字段,另一个用于使用 AdditionalFields 包含事件名称字段的年份字段。

它不起作用 - 如果我尝试添加一个具有相同名称和年份的事件,它会在年份字段中添加一个错误,更正它会修复它,然后再次尝试它会在名称字段和年份字段中添加一个错误,更正使组合唯一的名称字段只会从名称字段中删除错误 - 它像这样继续......

其他人如何做到这一点?

4

1 回答 1

0

如果您更喜欢使用数据注释进行验证,我建议您只使用 Codeplex 上提供的 Foolproof 验证库:https ://foolproof.codeplex.com/

除其他外,它支持以下“必需的”验证属性/装饰:

[RequiredIf]
[RequiredIfNot]
[RequiredIfTrue]
[RequiredIfFalse]
[RequiredIfEmpty]
[RequiredIfNotEmpty]
[RequiredIfRegExMatch]
[RequiredIfNotRegExMatch]

开始很容易:

  • 从提供的链接下载包
  • 添加对包含的 .dll 文件的引用
  • 导入包含的 javascript 文件
  • 确保您的视图从其 HTML 中引用包含的 javascript 文件,以进行不显眼的 javascript 和 jquery 验证。

如果你不喜欢通过用验证属性装饰你的域类来混合你的域和验证逻辑,你总是可以选择强大的流式验证。您可以在此处找到它的库: https ://fluentvalidation.codeplex.com/ 不幸的是,它只是服务器端的,但如果分离关注点对您很重要,这是一个合适的选择......并且上下文不会因验证绑定到特定字段。(见这里: http: //www.codeproject.com/Articles/326647/FluentValidation-and-Unity

于 2014-02-18T20:00:16.273 回答