为什么调用 ValidationAttribute.IsValid 的时间晚于预期
本文关键字:时间 于预期 IsValid 调用 ValidationAttribute 为什么 | 更新日期: 2023-09-27 18:32:21
我有一个用验证属性注释的属性。为什么在属性的 IsValid 方法之前调用属性上的 setter,更重要的是如何在设置值之前让它进行验证?
下面是一个草图的代码模型,用于查看验证器属性的外观:
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class MyAttribute: ValidationAttribute
{
public override bool IsValid(object value)
{
...
}
}
以下是属性在属性上的使用方式:
[MyAttribute]
public string MyProperty
{
get { ... }
set { ... }
}
我假设您是在谈论DataAnnotations
命名空间中的ValidationAttribute
?这些属性通常用于描述验证要求,没有任何特定的规定模型。
一个对象或一组对象,然后调用询问"现在有效吗?"是有意义的 - 因此,当然,在这种情况下,对 IsValid
方法的调用将在设置属性值后发生。
属性通常是被动的 - 直到某些东西实际以编程方式访问该属性并对其进行某些操作之前,该属性中的任何代码都不会运行。没有通用的方法可以编写一个属性,该属性说"当调用此属性附加到的成员时,请先运行这段代码"。