提交时验证数据注释模型中的多个字段(日期时间和Bool值)

本文关键字:日期 字段 时间 Bool 数据 验证 注释 模型 提交 | 更新日期: 2023-09-27 18:10:45

目前我正在MVC 3环境中工作,我需要添加一个验证,验证数据注释模型中的2个字段,就像验证在提交时触发的[Required(ErrorMessage="Required!")]一样。

目前,验证[Required]正在工作,但我需要检查booldateTime数据类型是否

这是我的模型中的代码

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字段的modelstate已经是有效的

提前感谢!

提交时验证数据注释模型中的多个字段(日期时间和Bool值)

目前我使用IValidatableObject,但它不验证,除非名称字段modelstate已经有效

DataAnnotationsIValidatableObject不能同时生效。我的意思是IValidatableObject的validate方法只会在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" });
        }
    }
}