gpt4 book ai didi

c# - 在自定义条件 ValidationAttribute 中检索条件值

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

我有一个名为 [DateOfBirth] 的自定义 MVC 验证属性 - 它在模型中的使用如下:

[DateOfBirth("DOBMinimumAgeValidation", 18, 100, ErrorMessage = "Please enter a valid date of birth")]
public DateTime? DateBirth { get; set; }

public Boolean DOBMinimumAgeValidation { get; set; }

“18”是最小年龄,“100”是最大年龄。

我的想法是,我可以将“DOBMinimumAgeValidation”属性作为参数传入,如果此参数为真,它将覆盖“最短出生日期”检查。

所以,这是我的属性代码:

public class DateOfBirthAttribute : ValidationAttribute, IClientValidatable
{
public DateOfBirthAttribute(string conditionalProperty, int minAge, int maxAge)
{
_other = conditionalProperty;
MinAge = minAge;
MaxAge = maxAge;
}

public int MinAge { get; private set; }
public int? MaxAge { get; private set; }
private string _other { get; set; }

[...]

我的想法是,我想在 GetClientValidationRules 方法中获取“_other”的值,这样我就可以重写它并在该值为真时将“MinAge”设置为 0,如下所示:

public IEnumerable<ModelClientValidationRule> GetClientValidationRules(
ModelMetadata metadata,
ControllerContext context)
{
//yield return new ModelClientValidationRule
var rule = new ModelClientValidationRule
{
ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()),
ValidationType = "dateofbirth"
};

if(_other.GetTheValueSomehow() == true)
MinAge = 0;

rule.ValidationParameters.Add("minimumage", MinAge);
rule.ValidationParameters.Add("maximumage", MaxAge.GetValueOrDefault(999));

yield return rule;
}

但是,我无法将“ValidationContext”对象传递给它,因为它只能从 ValidationResult 类型继承 - 所以我的问题是,如何获得“_other”的 bool 值?

最佳答案

我不知道这是否有帮助,但在我查看了 ModelMetadata 元数据ControllerContext context 之后,我发现将要验证的实际模型可以通过以下方式访问元数据.容器。剩下的就是简单的 C# 语句和反射。获取模型,检查它是否具有名为 _other 的 bool 属性,如果存在该属性,则检查其值是否为真:

var model = metadata.Container;
if (model != null)
{
var property = model.GetType().GetProperty(_other, typeof(bool));

if (property != null && (bool)property.GetValue(model))
{
MinAge = 0;
}
}

关于c# - 在自定义条件 ValidationAttribute 中检索条件值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32507194/

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