我有一个这样的课:

public class Document
{
   public int DocumentType{get;set;}

   [Required]
   public string Name{get;set;}

   [Required]
   public string Name2{get;set;}
}

现在,如果我在[Required]Name属性上放置了Name2数据批注,则一切正常,如果NameName2为空,则验证将引发错误。

但我只希望Name等于1时才需要DocumentType字段
Name2仅在DocumentType等于2时才需要。

public class Document
{
   public int DocumentType{get;set;}

   [Required(Expression<Func<object, bool>>)]
   public string Name{get;set;}

   [Required(Expression<Func<object, bool>>)]
   public string Name2{get;set;}
}

但我知道我做不到,这会导致错误。我该怎么办?

最佳答案

开箱即用,我认为这仍然是不可能的。

但是我发现了这个promising article about Mvc.ValidationToolkit(也是here,不幸的是this只是alpha,但您可能还可以从此代码中提取所需的方法并自己集成),它包含了听起来不错的属性RequiredIf,似乎完全符合您的原因:

  • 您可以从linked zip下载项目并进行构建
  • 从生成文件夹中获取生成的dll,并在您使用
  • 的项目中引用它
  • 不幸的是,这似乎也需要引用MVC(最简单的方法是在VS或install-package Microsoft.AspNet.Mvc中启动MVC项目)
  • 在要使用文件的
  • 中,添加using Mvc.ValidationToolkit;
  • 然后您就可以编写诸如[RequiredIf("DocumentType", 2)][RequiredIf("DocumentType", 1)]之类的东西,因此,只要name不等于1或2
  • ,如果没有提供name2DocumentType,则对象有效。

    10-07 16:03