c# - 控件的 ASP.NET Core 条件验证
问题描述
例如,我的视图模型中有这 3 个属性
public class PageViewModel
{
[Required]
public bool? HasControl { get; set; }
[Required]
public bool? Critical { get; set; }
[Required]
public string Description { get; set; }
}
这里的问题是我想制作属性
Critical
Description
如果 HasControl 为 true 则为必需,如果为 false 则不需要,这是一个单选按钮控件。
我尝试在客户端禁用控件,但在检查 Modelstate.IsValid 时它们仍然失败。
有没有办法处理这种情况?
解决方案
您需要实施IValidatableObject
. 将验证检查放入Validate
方法中。最后返回错误列表。
public class PageViewModel : IValidatableObject
{
public bool? HasControl { get; set; }
public bool? Critical { get; set; }
public string Description { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
List<ValidationResult> errors = new List<ValidationResult>();
if (HasControl == true)
{
if (Critical == null)
errors.Add(new ValidationResult($"{nameof(Critical)} is Required.", new List<string> { nameof(Critical) }));
if (string.IsNullOrWhiteSpace(Description))
errors.Add(new ValidationResult($"{nameof(Description)} is Required.", new List<string> { nameof(Description) }));
}
return errors;
}
}
推荐阅读
- c# - SQLite 和 EF6 的愚蠢行为
- laravel - 根据用户角色 laravel 执行操作
- ruby-on-rails - 文章不会显示在 Heroku 部署上
- android - 请求设置和proguard上的“未找到证书路径的信任锚”
- r - download.file() 错误:InternetOpenURL 失败:“安全通道支持出现错误”
- amazon-web-services - 为创建 ELB 规则而在 boto3 中传递的实际值是多少
- java - 电报用户不会收到来自机器人的消息
- javascript - 正则表达式(Javascript)允许忽略逗号
- ios - 处理 iPhoneX 的自定义标签栏
- html - 使一个非常宽的 div 水平滚动而不影响页面的其余部分