gpt4 book ai didi

c# - IValidatableObject 验证方法运行两次

转载 作者:太空宇宙 更新时间:2023-11-03 10:24:36 25 4
gpt4 key购买 nike

我有一个带有 Entity Framework 对象的模型。 EF 对象实现 IValidatableObject 并在其上具有 Validate() 方法。

由于某种原因,该方法运行了两次,所以我的页面上出现了两个相同的模型错误。

知道为什么会发生这种情况或如何阻止它吗?

我尝试添加一个 _isValidated 私有(private)成员变量,但它似乎每次运行时都重置为 false,因此它必须创建和验证模型的两个实例。

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (string.IsNullOrWhiteSpace(CatName))
{
yield return new ValidationResult("Bad kitty", new string[] { "CatName", "CatName" });
}
}

编辑:我的模型:

    public class KittyModel
{
public Cat Cat { get; set; }

public int? SomeId { get; set; }

public string SomeString { get; set; }
}

那么 Cat 只是一个 EF 对象

    [MetadataType(typeof(CatMetadata))]
public partial class Cat : IValidatableObject
{
public sealed class CatMetadata
{
[Required]
public int? CatTypeID { get; set; }
}

// Some other get; only properties here

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (string.IsNullOrWhiteSpace(CatName))
{
yield return new ValidationResult("Bad kitty", new string[] { "CatName", "CatName" });
}
}
}

最佳答案

我今天遇到了同样的问题...我相信这就是验证方法被调用 2 次的原因,from here :

If your model is a complex model inside of a complex model, validation might be called twice for model-level validators (which IValidatableObject is considered to be). That's because it's validated once as a stand-alone object, and then again as the property of its containing object.

关于c# - IValidatableObject 验证方法运行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32091275/

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