c# - 如何根据另一个字段的值使一个字段成为必填字段
问题描述
我有一个 ViewModel,其中包含一些具有数据注释的公共属性,如下所示:
[Required]
public string PointOfContact { get; set; }
哪个工作得很好。我已经准备好所有必要的管道,以便在验证失败时显示正确的控件格式和错误消息。
但是,我有一些根据复选框的值有条件地需要的字段。例如:
public bool Briefing { get; set; }
public DateTime BriefingTime { get; set; }
在这种情况下,我只希望在选中绑定到 Briefing 属性的复选框时需要 BriefingTime。BriefingTime 的可见性已经绑定到 Briefing,所以我只需要在选中复选框时让它具有通常的必需行为。
有没有一种开箱即用的方法,还是我需要编写自己的数据注释类?这样的班级会是什么样子?
解决方案
您可以编写自己的自定义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;
}
}
推荐阅读
- javascript - 让这个窗口滚动触发器在 IE 中工作
- python - 在 cython 中使用迭代器
- google-maps - React Native,Invariant Violation:“AIRMap”的本机组件不存在
- odoo - 我有 odoo 8 数据库,我想在 odoo 11 中恢复它。有可能吗?
- android - Linphone 1 分钟后无法在没有 wifi 网络的情况下接听来电者的来电
- javascript - 如果事件侦听器的条件
- sbt - 为什么项目中有两个不同版本的sbt
- parameters - verilog/systemverilog 通过生成的模块层次结构向上传递参数
- javascript - 如何将 React Native AsyncStorage 与 Redux 一起使用?
- google-cloud-platform - Run node.js database migrations on Google Cloud SQL during Google Cloud Build