gpt4 book ai didi

asp.net - 在嵌套对象上调用 MVC IValidatableObject

转载 作者:行者123 更新时间:2023-12-02 14:29:29 26 4
gpt4 key购买 nike

所以我有以下对象

public class Person : IValidatableObject 
{

[Required]
public string Name {get;set;}
[Required]
public string Status {get;set;
public Address Address {get;set;}
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{

if (Status != "Addressless" && Address == null)
{
yield return new ValidationResult("An address is required if this person is not addressless");
}
}
}

public class Address
{
[Required]
public string Address1 {get;set;}
[Required]
public string City {get;set;}
}

现在,我的问题是需要地址值,因为如果该人确实有地址,则 EF Code First 不需要地址表中 DB 中的空值。这似乎会导致问题,因为人员不需要地址,因此如果他们是“无地址”,则不应进行地址验证,但验证仍然会开始,因为地址具有必填字段。

有办法解决这个问题吗?

最佳答案

原因

chris-shouts描述于answer类似的问题。

When validating an object, the following process is applied in Validator.ValidateObject:

  1. Validate property-level attributes
  2. If any validators are invalid, abort validation returning the failure(s)
  3. Validate the object-level attributes
  4. If any validators are invalid, abort validation returning the failure(s)
  5. If on the desktop framework and the object implements IValidatableObject, then call its Validate method and return any failure(s)

您的案例

因此,在您的情况下,必需属性验证阻止您的 IValidationObject 被检查。

可能的解决方案

可能的解决方案是在验证方法中移动所需的地址检查

关于asp.net - 在嵌套对象上调用 MVC IValidatableObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13346545/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com