如何根据另一个字段的值使一个字段成为必填字段
How to make a field required, based on the value of another field
我有一个 ViewModel,其中一些 public 属性具有数据注释,如下所示:
[Required]
public string PointOfContact { get; set; }
效果很好。我已经准备好所有必要的管道,以便在验证失败时显示正确的控件格式和错误消息。
但是,我有一些字段根据复选框的值有条件地需要。例如:
public bool Briefing { get; set; }
public DateTime BriefingTime { get; set; }
在这种情况下,我只希望在选中绑定到 Briefing 属性 的复选框时才需要 BriefingTime。 BriefingTime 的可见性已经绑定到 Briefing,所以我只需要在选中复选框时让它具有通常的必需行为。
有没有一种开箱即用的方法,或者我需要编写自己的数据注释 class?这样的 class 会是什么样子?
您可以编写自己的自定义 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;
}
}
我有一个 ViewModel,其中一些 public 属性具有数据注释,如下所示:
[Required]
public string PointOfContact { get; set; }
效果很好。我已经准备好所有必要的管道,以便在验证失败时显示正确的控件格式和错误消息。
但是,我有一些字段根据复选框的值有条件地需要。例如:
public bool Briefing { get; set; }
public DateTime BriefingTime { get; set; }
在这种情况下,我只希望在选中绑定到 Briefing 属性 的复选框时才需要 BriefingTime。 BriefingTime 的可见性已经绑定到 Briefing,所以我只需要在选中复选框时让它具有通常的必需行为。
有没有一种开箱即用的方法,或者我需要编写自己的数据注释 class?这样的 class 会是什么样子?
您可以编写自己的自定义 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;
}
}