gpt4 book ai didi

c# - 自定义 DataTypeAttribute 未正确触发验证

转载 作者:行者123 更新时间:2023-11-30 18:07:18 25 4
gpt4 key购买 nike

与此相关question

我已经创建了自己的 DateValidationAttibute 以确保字符串采用有效的日期格式(例如,MM/DD/YYYY)

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false)]
public class DateValidationAttribute : DataTypeAttribute
{
public DateValidationAttribute() : base(DataType.Date){}

//MM/DD/YYYY, MM-DD-YYYY
public override bool IsValid(object value)
{
//validation logic
}
}

我正在尝试用这段代码测试这个属性

    [Test]
public void Test()
{
var invalidObject = new TestValidation {DateField = "bah"};
var validationContext = new ValidationContext(invalidObject, null, null);
var validationResults = new System.Collections.Generic.List<ValidationResult>();

bool result = Validator.TryValidateObject(invalidObject, validationContext, validationResults);

Assert.IsFalse(result);
Assert.AreEqual(1, validationResults.Count);
}

private class TestValidation
{
[DateValidation(ErrorMessage = "Invalid Date!")]
public string DateField { get; set; }
}

不幸的是,这不起作用。我在 DateValidationAttribute 构造函数和 IsValid 方法中放置了一个断点。它肯定会命中构造函数,但永远不会命中 IsValid 方法。有什么想法吗?

最佳答案

TryValidateObject 方法有一个重载,可以将 bool 值 validateAllProperties 作为第四个参数。如果不指定,则默认为 false,即只检查部分属性。

[Test]
public void Test()
{
var invalidObject = new TestValidation {DateField = "bah"};
var validationContext = new ValidationContext(invalidObject, null, null);
var validationResults = new System.Collections.Generic.List<ValidationResult>();

//Validate all attributes
bool result = Validator.TryValidateObject(invalidObject, validationContext, validationResults, true);

Assert.IsFalse(result);
Assert.AreEqual(1, validationResults.Count);
}

关于c# - 自定义 DataTypeAttribute 未正确触发验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4059814/

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