假设我有一个表单,其中包含有关未来会议数据的字段(不是真正的域名,但足以满足此问题的目的)。部分验证是新事件只能在该年发生一次,例如,如果您在2012年发生了“stackoverflow getmessyandrunk会议” - 则不应允许用户输入具有相同名称的新事件。一年......
现在 - 我到目前为止尝试的是为每个字段添加一个远程验证器:
一个用于事件名称字段,该字段使用AdditionalFields属性包含year字段,一个用于year字段,该字段使用AdditionalFields包含事件名称字段。
它不起作用 - 如果我尝试添加一个具有相同名称和年份的事件,它只会在年份字段中添加错误,更正它会修复它,然后再次尝试它会在名称字段和年份中添加错误字段,更正名称字段以使组合唯一只从名称字段中删除错误 - 它继续这样...
其他人如何做到这一点?
答案 0 :(得分:0)
如果您更喜欢使用数据注释进行验证,我建议您只使用Codeplex上提供的Foolproof验证库:https://foolproof.codeplex.com/
它支持以下“requiredif”验证属性/装饰:
[RequiredIf]
[RequiredIfNot]
[RequiredIfTrue]
[RequiredIfFalse]
[RequiredIfEmpty]
[RequiredIfNotEmpty]
[RequiredIfRegExMatch]
[RequiredIfNotRegExMatch]
开始很容易:
如果您不喜欢通过使用验证属性修饰域类来混合域和验证逻辑,则可以始终选择强大的流畅验证。你可以在这里找到它的库: https://fluentvalidation.codeplex.com/ 遗憾的是,它只是服务器端,但如果关注点分离对您来说是一个合适的选项......并且由于验证与特定字段相关联而不会丢失上下文。 (见这里:http://www.codeproject.com/Articles/326647/FluentValidation-and-Unity)