gpt4 book ai didi

c# - 如何根据 DataAnnotation 中的另一个属性验证一个属性

转载 作者:太空狗 更新时间:2023-10-30 00:44:16 26 4
gpt4 key购买 nike

考虑我有这两个属性:

public class Test
{
[Required(ErrorMessage = "Please Enetr Age")]
public System.Int32 Age { get; set; }
[Required(ErrorMessage = "Choose an option")]
public System.Boolean IsOld { get; set; }
}

当用户为 Age 输入例如 15 并为 IsOld 选择“Yes”时,我返回一个正确的异常 年龄IsOld。我为此使用了 CustomValidation,但因为我的验证必须是静态的,所以我无法访问其他属性。如何通过 DataAnnotation 执行此操作?

最佳答案

您可以向类本身添加数据注释(自定义验证器)。在验证属性的 isValid 方法中,您应该能够转换对象并测试需要实现的值。

例子:

using System;
using System.Collections.ObjectModel;
using System.ComponentModel.DataAnnotations;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// setup test object
Test t = new Test() { Age = 16, IsOld = true };
// store validation results
Collection<ValidationResult> validationResults = new Collection<ValidationResult>();
// run validation
if (Validator.TryValidateObject(t, new ValidationContext(t, null, null), validationResults, true))
{
// validation passed
Console.WriteLine("All items passed validation");
}
else
{
// validation failed
foreach (var item in validationResults)
{
Console.WriteLine(item.ErrorMessage);
}
}
Console.ReadKey(true);
}
}

[TestValidation(ErrorMessage = "Test object is not valid")]
public class Test
{
public int Age { get; set; }
public bool IsOld { get; set; }
}

public class TestValidation : ValidationAttribute
{
public override bool IsValid(object value)
{
bool isValid = false;
Test testVal = value as Test;
if (testVal != null)
{
// conditional logic here
if ((testVal.Age >= 21 && testVal.IsOld) || (testVal.Age < 21 && !testVal.IsOld))
{
// condition passed
isValid = true;
}
}
return isValid;
}
}
}

关于c# - 如何根据 DataAnnotation 中的另一个属性验证一个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8283968/

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