Asp.Net MVC 3验证2个依赖字段

时间:2012-09-21 10:11:40

标签: asp.net asp.net-mvc asp.net-mvc-3 validation

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

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

一个用于事件名称字段,该字段使用AdditionalFields属性包含year字段,一个用于year字段,该字段使用AdditionalFields包含事件名称字段。

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

其他人如何做到这一点?

1 个答案:

答案 0 :(得分:0)

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

它支持以下“requiredif”验证属性/装饰:

[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

相关问题