目前我正在研究MVC 3环境,我需要添加验证,验证Dataannotation模型中的2个字段,就像在提交时触发的[Required(ErrorMessage="Required!")]
验证一样。
目前,验证[Required]
正在运行,但我需要检查bool
和dateTime
数据类型
继承我的模型中的代码
public class NameInfo: IValidatableObject
{
[Display(Name = "Name")]
[Required(ErrorMessage = "Required!")]
public string Name{ get; set; }
[Display(Name = "Start Date")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public Nullable<DateTime> StartDate { get; set; }
[Display(Name = "Already Starting")]
public bool IsStarting{ get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (!IsStarting&& !StartDate.HasValue)
{
yield return new ValidationResult("Required.", new[] { "StartDate" });
}
}
}
目前即时使用IValidatableObject
,但未验证,除非name
字段模型状态已经有效
提前致谢!
答案 0 :(得分:1)
目前我正在使用IValidatableObject,但它没有验证,除非 名称字段模型状态已经有效
DataAnnotations
和IValidatableObject
不会一起验证。我的意思是IValidatableObject
的验证方法仅在您的DataAnnotations
有效时才会被调用。
编写自己的ValdiationAttribute
或将所需的验证添加到IValidatableObject
。
以下是后者的一个例子......
public class NameInfo : IValidatableObject
{
[Display(Name = "Name")]
public string Name { get; set; }
[Display(Name = "Start Date")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public Nullable<DateTime> StartDate { get; set; }
[Display(Name = "Already Starting")]
public bool IsStarting { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (string.IsNullOrEmpty(Name))
{
yield return new ValidationResult("Name is required!");
}
if (!IsStarting && !StartDate.HasValue)
{
yield return new ValidationResult("Required.", new[] { "StartDate" });
}
}
}