根据表单asp.net core 2

时间:2018-06-11 18:38:06

标签: asp.net-mvc validation asp.net-core-2.0

我有一个包含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

0 个答案:

没有答案