代码之家  ›  专栏  ›  技术社区  ›  Robert Harvey

如何根据另一个字段的值使字段成为必需字段

  •  1
  • Robert Harvey  · 技术社区  · 7 年前

    我有一个ViewModel,它具有一些带有数据注释的公共属性,如下所示:

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

    效果很好。我已经准备好了所有必要的管道,以便在验证失败时显示正确的控件格式和错误消息。

    但是,我有一些字段 有条件地 根据复选框的值需要。例如:

    public bool Briefing { get; set; }
    public DateTime BriefingTime { get; set; }
    

    在本例中,我只希望在选中绑定到Briefing属性的复选框时需要BriefingTime。BriefingTime的可见性已经绑定到Briefing,所以我只需要在选中复选框时使它具有通常所需的行为。

    有没有一种开箱即用的方法,或者我需要编写自己的数据注释类?这样的班级会是什么样子?

    1 回复  |  直到 7 年前
        1
  •  2
  •   mr.coffee    7 年前

    你可以写你自己的习惯 ValidationAttribute

    public class BriefingTimeRequiredAttribute : ValidationAttribute
    {
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            var model = (MyModel)validationContext.ObjectInstance;
            if (model.Briefing && !model.BriefingTime.HasValue)
            {
                return new ValidationResult("BriefingTime is required.");
            }
            return ValidationResult.Success;
        }
    }