【发布时间】:2013-09-27 15:02:59
【问题描述】:
我有一个类(应用程序),它具有另一个自定义类(就业)类型的多个属性。我想根据 Application 类的属性是否标有 [Required] 有条件地验证就业类。
根据我的发现,我认为我应该使用 IValidatableObject 接口进行就业。问题是我不确定如何使用反射(或其他方法)来检查该类的实例是否用 [Required] 属性注释以确定是否验证它。
也许这根本不可能。我最初为就业类设置了两个类:Employment 和EmploymentRequired。只有后者在其属性上具有验证属性。它有效,但如果可能的话,我想只使用一个类。
public class Application
{
[Required]
public Employment Employer1 { get; set; }
public Employment Employer2 { get; set; }
}
public class Employment : IValidatableObject
{
[Required]
public string EmployerName { get; set; }
[Required]
public string JobTitle { get; set; }
public string Phone { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var results = new List<ValidationResult>();
var t = this.GetType();
//var pi = t.GetProperty("Id");
//var isRequired = Attribute.IsDefined(pi, typeof(RequiredAttribute));
//how can I get the attributes of this property in Application class?
if (isRequired)
{
Validator.TryValidateProperty(this.EmployerName,
new ValidationContext(this, null, null) { MemberName = "EmployerName" }, results);
Validator.TryValidateProperty(this.JobTitle,
new ValidationContext(this, null, null) { MemberName = "JobTitle" }, results);
}
return results;
}
}
【问题讨论】:
-
您需要参考在就业类中包含应用程序类。通过使用反射,您可以检查此 emplyment 的实例是否与应用程序类实例的属性 employee1 / 2 匹配,如果该属性已设置 [required] attr,则验证就业类实例
-
@rt2800 我没有完全关注你。你能分享一些代码(甚至是伪代码)来解释更多吗?
-
@PrestonGuillot 我从示例中的那个问题中获取了一些代码,但我不确定如何在此处应用它。我以前检索过类似属性的属性,但只是在嵌套在另一个类中时没有。
标签: c# .net validation reflection data-annotations