【发布时间】:2018-12-19 07:43:02
【问题描述】:
在下面的代码中,我想检查 AttributeValidation 是否给定了一个字段,该字段依赖于其父元素的属性。类中的注释
RequiredIfParentState1
最好地描述了我的问题。
public class ChildModel()
{
[RequiredIfParentState1]
public string ImRequired { get; set; }
}
public class ParentViewModel()
{
public int state { get; set; }
public ChildModel child = new ChildModel();
}
public class RequiredIfParentState1: ValidationAttribute, IClientModelValidator
{
RequiredIfParentState1()
{
}
void AddValidation(ClientModelValidationContext context)
{
}
protected override ValidationResult IsValid(object i_value, ValidationContext i_context)
{
var element = i_context.ObjectInstance;
if(i_value == null && //what do i have to put here to check if the state is 1?)
{
return new ValidationResult($"Field is Required in state 1.");
}
return ValidationResult.Success;
}
}
【问题讨论】:
-
你不能。
ValidationContext是属性类(在您的情况下为ChildModel)。它不知道任何父类 -
我害怕听到这个......有什么好的解决方法吗?
-
最简单的方法是在单个视图模型中拥有所有属性
-
好的,谢谢......但在我的情况下,这将是一个非常大的数百行 - 我还考虑在每个“ChildModel”中创建一个存储在构造函数中的父属性.. .
-
为什么不在
ChildModel中包含一个bool IsRequired属性并根据父模型中state的值进行设置
标签: validation asp.net-core-mvc asp.net-core-2.0 validationattribute