我有一个包含int字段和另一个表单(class)列表的表单。我想根据int字段验证列表中的表单。
int field
的值可以是1或2.如果是2,请验证列表表单,否则不要(我不需要列表表单)。
问题是,我找不到任何方法来获取另一种形式的int字段值。 ValidationContext
对象只有实际类的实例,而不是父类(主窗体)。
我在int field
上创建了一个自定义验证,以清除列表,以防他的值为1(我不需要验证列表)。
最新版本的问题,它会勾选(清除列表),但是ModelState.IsValid
返回false,我没有看到任何错误消息。
如果我删除自定义验证,它会在列表中显示所需表单的验证错误。
public class ReserveForm
{
[Required]
[DataMember]
[Range(1, 2)]
[OnTypeValidation]
public int type { get; set; }
[MultiFlights]
public List<MultiFlightForm> multiFligths {get;set;}
}
public class MultiFlightForm
{
[Required]
public String from { get; set; }
[Required]
public String to { get; set; }
[Required]
public override DateTime DateTime { get; set; }
}
public class OnTypeValidationAttribute: ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if ((int)value != 2) {
ReserveForm reserveForm = (ReserveForm)validationContext.ObjectInstance;
reserveForm.multiFligths.Clear();
}
return ValidationResult.Success;
}
}
如您所见,在ReserveForm(主窗体)上,我在列表中有一个名为MultiFlights的自定义属性。问题是,它只在列表为空或空时才被调用。
我无法添加自定义属性来对其他/子表单(MultiFlightForm)执行字段操作,因为我无法访问字段type
。