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

标签 asp.net .net asp.net-mvc

所以我有以下对象

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/

相关文章:

c# - 更快地从 varbinary 加载图像

javascript - "the server tag is not well formed"是什么意思,这个按钮会发生什么?

Asp.Net 如何获取正则表达式的字符串结果,而不仅仅是一个

asp.net - 如何在asp.net中打印页面的一部分

c# - Invoke() 和 BeginInvoke() 有什么区别

.net - 如何在属性网格中将 bool 属性显示为"is" |“否”?

c# - 在 MVC EF 中导航多个关系

.net - 可以将 ASP.NET MVC3 Controller (和 View ?)重新分发为类库 dll 吗?

c# - 检查给定路径的文件或文件夹是否存在

asp.net-mvc - Visual Studio 2010 Web 发布缺少文件