c# - Validator.TryValidateObject 在所有情况下始终返回 true
问题描述
我有一个有两个属性的类。我想验证其中一个,这是另一个类,我已经 [Required(ErrorMessage = "Error message", AllowEmptyStrings = false)]
在我要验证的每个属性上都说明了。
public partial class Factura
{
[JsonProperty("Cabecera")]
public Cabecera Cabecera { get; set; }
public string Imagen { get; set; }
}
public partial class Cabecera
{
[Required(ErrorMessage = "Debe especificarse un emisor", AllowEmptyStrings = false)]
[JsonProperty("Emisor")]
public string Emisor { get; set; }
[Required(ErrorMessage = "Debe especificarse un número de factura", AllowEmptyStrings = false)]
[JsonProperty("Factura")]
public string Factura { get; set; }
}
验证的实际执行:
var test = new Factura();
var errors = new List<ValidationResult>();
Validator.TryValidateObject(test, new ValidationContext(test), errors, true);
当对象明显不应该通过验证时,Validator.TryValidateObject(test, new ValidationContext(test), errors, true);
总是返回。true
我究竟做错了什么?
解决方案
问题是我没有指定正确的ValidationContext
(实际上是Cabecera
类和属性),因为我假设(没有参数)创建“父”类本身的 ValidationContext 将“神奇地”使用DataAnnotations
.
请注意您要验证的内容以及ValidationContext
实际创建的内容!
var test = new Factura();
test.Cabecera = new Cabecera();
var errors = new List<ValidationResult>();
Validator.TryValidateObject(test.Cabecera, new ValidationContext(test.Cabecera), errors, true);
推荐阅读
- email - 在 mailgun 上使用子域时如何接收发送到 rootdomain 的电子邮件?
- java - 使用opencsv beanwriter时如何指定列顺序?
- python - Count business day between using pandas columns
- algorithm - 我认为“NlogN”是“N”乘以“logN”,但为什么它被描述为“加倍加上与 N 成正比的数量”
- sql - SQL 重复优化
- database - How to use derived columns in Laravel DB query
- sql - Retrieving data from a reader and saving it in a double variable
- sqlite - 不要在 SQLLite 查询中因缺少列而失败
- android - Can someone please assist me with this Ionic Project
- spring-boot - 我是否需要用于 spring-boot 中的测试的配置文件?